11

taskdefを使用して外部antタスクを宣言する場合、たとえばant-contribの場合、提案されるセットアップは、次のtaskdefを使用することです。

<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 / net / sf / antcontribに入れて、taskdefをに変更すると

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

Antはプロパティファイルを見つけることができません、それはエラーを出します

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

antはlibディレクトリを個別に扱い、そこからtaskdefリソースをロードできないようです。

4

3 に答える 3

5

アレックスが言ったように、あなたは瓶を解凍する必要はないはずです。は、<taskdef>antcontrib.propertiesをjarから直接ロードできます。

発生したエラーは、リソースパスを変更したためですが、圧縮されたjar/zip内のファイルへのパスは同じです。taskdefは、移動したプロパティファイルに注意を払っていません<classpath><taskdef>これは、jarにのみ表示するように指定したためです。

于 2010-04-01T07:01:50.697 に答える
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ファイルから何も抽出する必要はありません。また、uriantcontribタスクで名前空間を使用したくない場合は、属性はオプションです。

于 2010-01-13T00:26:18.867 に答える
2

タスク定義のクラスパスを処理するために、Antでクラスパス参照を使用します。これははるかに簡単です。クラスを含むディレクトリ、多くの.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>
于 2010-02-09T08:07:20.777 に答える