我想看看這裏設置了哪些系統屬性(以及哪些值),所以最簡單的方法(如果不是在這裏寫一個新的Java程序)將會添加一些行到我的ant構建腳本中:在哪裏可以找到缺少可選的ant任務?
<target name="properties">
<echoproperties/>
</target>
但是運行ant給我此錯誤消息:
/u/ebermann/projektoj/stackoverflow-examples/build.xml:19: Problem: failed to create task or type echoproperties
Cause: the class org.apache.tools.ant.taskdefs.optional.EchoProperties was not found.
This looks like one of Ant's optional components.
Action: Check that the appropriate optional JAR exists in
-/usr/share/ant/lib
-/u/ebermann/.ant/lib
-a directory added on the command line with the -lib argument
Do not panic, this is a common problem.
The commonest cause is a missing JAR.
This is not a bug; it is a configuration problem
好了,所以我不慌,,但不知道該怎麼辦。
我這裏有螞蟻1.7.1(在OpenSuse系統),而可悲的是這個版本沒有文檔,而且我不是root來安裝這一個當前螞蟻版本或舊版本的文檔(我只是下載了它它仍然沒有說這裏需要哪個jar文件)。在上面列出的目錄中,只有/usr/share/ant/lib
存在,但它不包含任何內容,如optional
。
我想下載必要的jar文件並將其放在我的主目錄中,但在哪裏可以找到它?該ant download archive包含沒有這樣的,我不知道在哪裏可以搜索。 (我做google了一下,但沒有發現任何東西。
因此,有人可以給我一些指點哪裏可以找到合適的jar文件?
(我猜的解決方案是很容易的,有什麼東西。只是擋着我的視線)
後vahapt的回答,我從網上下載apache repository文件,並把它變成該錯誤消息中提到的目錄/u/ebermann/.ant/lib
再次運行ant properties
- 在相同的R-如上所述。
$ jar -tf /u/ebermann/.ant/lib/ant-nodeps-1.7.1.jar | grep 'EchoProperties.class'
org/apache/tools/ant/taskdefs/optional/EchoProperties.class
這看起來像它應該工作 - 是錯誤信息只是錯誤?
如果我把它直接到CLASSPATH,它的工作原理:
$ CLASSPATH=/u/ebermann/.ant/lib/ant-nodeps-1.7.1.jar ant properties
Buildfile: build.xml
properties:
[echoproperties] #Ant properties
[echoproperties] #Thu Mar 10 00:46:22 CET 2011
...
[echoproperties] user.name=ebermann
[echoproperties] user.timezone=
BUILD SUCCESSFUL
Total time: 0 seconds
我不想改變我的正常CLASSPATH變量,它應該是放入此目錄中工作,或者我才明白有問題?
任何想法,或者這是一個螞蟻的錯誤?
(另外,爲什麼是這個文件無處螞蟻文檔中提及?)
編輯:
從vahapt答案後,我的ant構建文件看起來是這樣的:
<project name="stackoverflow-examples" basedir=".">
<target name="echoproperties.prepare">
<available property="echoproperties.works"
classname="org.apache.tools.ant.taskdefs.optional.EchoProperties"
/>
</target>
<target name="echoproperties.init"
depends="echoproperties.prepare"
unless="echoproperties.works">
<taskdef name="echoproperties" classname="org.apache.tools.ant.taskdefs.optional.EchoProperties">
<classpath>
<fileset dir="${user.home}/.ant/lib">
<include name="ant-nodeps.jar" />
</fileset>
</classpath>
</taskdef>
</target>
<target name="properties" depends="echoproperties.init">
<echoproperties/>
</target>
</project>
此重新註冊,只有當它是不是已經在螞蟻類路徑的任務。 (因此,它也適用於在主目錄中沒有此文件的完整ant安裝)。
我還是要說,This is not a bug; it is a configuration problem
不完全正確的,更是爲將在該文件中指定的目錄不不幫助。
還有一個有趣的現象:在${user.home}/.ant/lib
的nodeps.jar(即現在/u/ebermann/.ant/lib/ant-nodeps.jar
)已經在類路徑(由${java.class.path}
所示的一個,但是這似乎沒有幫助<echoproperties>
到沒有這個工作。taskdef
所以,這個工程太:
<target name="echoproperties.init"
depends="echoproperties.prepare"
unless="echoproperties.works">
<taskdef name="echoproperties"
classname="org.apache.tools.ant.taskdefs.optional.EchoProperties"
classpath="${java.class.path}" />
</target>
也許如果你命名文件ant-nodeps.jar,而沒有版本,Ant可能會找到它。我相信你的問題出現了,因爲Ubuntu在幾個部分中封裝了Ant - 核心,可選,文檔,而Apache版本已經組裝好幾年了。現在將歷史的「核心」和「可選」任務視爲平等。 – 2011-03-10 00:31:37
我在OpenSUSE而不是Ubuntu上,但它可能類似。 (在我的Ubuntu系統中,我是root用戶,並且也有當前的螞蟻。)更改文件名不會改變任何內容,它看起來像ant完全忽略了這個目錄。 '-lib'參數也是。 – 2011-03-10 00:36:49