Почему не может, Муравей taskdef не может загрузить ресурс вне./сеть

При объявлении внешних задач 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 ресурс оттуда.

11
задан Ernelli 12 January 2010 в 15:28
поделиться

3 ответа

Как сказал Алекс, вам не нужно распаковывать банку. может загружать antcontrib.properties прямо из jar-файла.

Вы получили ошибку, потому что вы изменили путь к ресурсу, но путь к файлу внутри сжатого jar / zip-архива остался прежним. Taskdef не обращает внимания на файл свойств, который вы переместили, потому что , который вы указали для , указывает ему только смотреть в jar.

5
ответ дан 3 December 2019 в 09:41
поделиться

Использование 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.

4
ответ дан 3 December 2019 в 09:41
поделиться

Для обработки 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>
2
ответ дан 3 December 2019 в 09:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: