2010-01-12 30 views
11

聲明時使用的taskdef外部Ant任務,例如antcontrib,建議設置是使用了跟隨着的taskdef:爲什麼不螞蟻的taskdef無法加載的資源外./net

<taskdef resource="net/sf/antcontrib/antcontrib.properties"> 
    <classpath> 
    <pathelement location="lib/ant-contrib/ant-contrib-1.0b3.jar"/> 
    </classpath> 
</taskdef> 

這工作時antcontrib .properties位於相對於build.xml文件的net/sf/antcontrib中。

但是,當我把它放在LIB /淨/平方英尺/ antcontrib和改變的taskdef到

<taskdef resource="lib/net/sf/antcontrib/antcontrib.properties"> 
    <classpath> 
    <pathelement location="lib/ant-contrib/ant-contrib-1.0b3.jar"/> 
    </classpath> 
</taskdef> 

螞蟻無法找到屬性文件,它提供了錯誤

[taskdef] Could not load definitions from resource 
lib/net/sf/antcontrib/antcontrib.properties. It could not be found. 

它看起來像螞蟻分別處理lib目錄,並無法從那裏加載taskdef資源。

回答

5

正如亞歷克斯說,你不應該需要解壓的jar。 <taskdef>可以直接從jar中加載antcontrib.properties。

您得到的錯誤是因爲您更改了資源路徑,但壓縮jar/zip文件內的路徑仍然相同。 taskdef沒有關注您移動的屬性文件,因爲您提供給<taskdef><classpath>指示它只查看jar文件。

+1

我有一個有效的,也有在閱讀你的解釋之後,將antcontrib.properties提取到./net/sf/antcontrib/中,我意識到我可以刪除屬性文件,並且ant-contrib任務仍然有效。我使用安裝頁面中提到的taskdef http://ant-contrib.sourceforge.net/#install – Ernelli 2010-04-06 08:17:04

+0

您爲我們節省了數小時的猜測 - 相對於jar路徑是關鍵。 – 2010-11-19 19:48:04

4

使用antlib.xml資源:

這裏是我使用的taskdef定義:

<property name="ant-contrib.jar" location="..."/> 

<taskdef 
    resource="net/sf/antcontrib/antlib.xml" 
    uri="http://ant-contrib.sourceforge.net" 
> 
    <classpath> 
    <pathelement location="${ant-contrib.jar}"/> 
    </classpath> 
</taskdef> 

你不需要提取jar文件什麼。另外,如果不想將命名空間與antcontrib任務一起使用,則uri屬性是可選的。

2

爲了處理任務定義的類路徑,我在Ant中使用了classpath ref,它更容易。你可以鏈接一個包含類的目錄,一個包含許多.jar的目錄,當然也可以是一個.jar。

例如:

<!-- Properties --> 
    <property name="lib" value="lib/" /> 
    <property name="classes" value="bin/" /> 

    <!-- Classpath definition --> 
    <path id="runtime-classpath" > 
     <pathelement location="${bin}" /> 
     <fileset dir="${lib}"> 
      <include name="*.jar"/> 
     </fileset> 
    </path> 

    <!-- Taskdefs definitions --> 
    <taskdef name="myTask" classname="org.stackoverflow.tasks.MyTask" classpathref="runtime-classpath" /> 

    <!-- Tasks --> 
    <target name="test" description="Test Action"> 
      <myTask parameter1="value" /> 
    </target> 
+0

好提示;)但是,您使用''但沒有屬性名稱'bin'。也許錯誤是''property name =「classes」value =「bin /」/>'其中'classes'應該用'bin'代替......乾杯;-) – olibre 2013-07-24 15:19:05

相關問題