При объявлении внешних задач Ant с помощью taskdef, например, муравей-contrib, предложенная установка должна использовать следующий taskdef:
<taskdef resource="net/sf/antcontrib/antcontrib.properties">
<classpath>
<pathelement location="lib/ant-contrib/ant-contrib-1.0b3.jar"/>
</classpath>
</taskdef>
Это работает, когда antcontrib.properties расположен в net/sf/antcontrib относительно файла build.xml.
Но когда я поместил его в 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>
Муравей не в состоянии найти файл свойств, он дает ошибку
[taskdef] Could not load definitions from resource
lib/net/sf/antcontrib/antcontrib.properties. It could not be found.
Это походит на обработки муравья каталог lib отдельно и не удается загрузить taskdef ресурс оттуда.
Как сказал Алекс, вам не нужно распаковывать банку.
может загружать antcontrib.properties прямо из jar-файла.
Вы получили ошибку, потому что вы изменили путь к ресурсу, но путь к файлу внутри сжатого jar / zip-архива остался прежним. Taskdef не обращает внимания на файл свойств, который вы переместили, потому что
, который вы указали для
, указывает ему только смотреть в jar.
Использование Antlib.xml
Ресурс:
Вот определение задачи, которое я использую:
<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. Кроме того, атрибут URI
является необязательным, если вы не хотите использовать пространства имен с задачами Antcontrib.
Для обработки classpath для определений задач, я использую classpath ref в 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>