Как эмулировать "-lib foo.jar" из _within_ build.xml - PullRequest
2 голосов
/ 03 марта 2010

Указав ant -lib foo.jar для ant, я получаю поведение, заключающееся в том, что классы в foo.jar добавляются в загрузчик классов ant и доступны для различных задач, принимающих аргумент имени класса.

Я бы хотел иметь возможность указать то же поведение, но только из внутри build.xml (так что мы можем сделать это на ванильном муравье).

Для taskdefs у нас есть функциональный код, похожий на:

<taskdef resource="net/sf/antcontrib/antlib.xml" description="for/foreach tasks">
    <classpath>
        <pathelement location="${active.workspace}/ant-contrib-1.X/lib/ant-contrib.jar" />
    </classpath>
</taskdef>

, где определение полностью предоставлено из перечисленного ant-contrib.jar.

Каков эквивалентный механизм для «глобального» муравьиного пути?

(я подумал, что это способ получить <javac> использовать ecj-3.5.jar для компиляции на JRE - Полное указание компилятора Eclipse из _within_ build.xml - в способ совместим с муравьем 1.7. Лучшие предложения приветствуются:)


РЕДАКТИРОВАТЬ: Похоже, что версия 1.0 ant4eclipse, которая будет выпущена, включает ecj. Это не отвечает на вопрос, но может решить мою основную проблему.

Ответы [ 2 ]

1 голос
/ 14 апреля 2010

Если вы когда-нибудь решите перейти на Ant 1.8, вы можете использовать следующую конструкцию:

<import>
  <javaresource name="resource_name.xml">
   <classpath location="path_to_jar.jar" />
  </javaresource>
</import>  
1 голос
/ 03 марта 2010

Я отправил ответ на вопрос, который вы связали. Я повторю общее решение здесь.

Чтение Запуск Ant через Java , я думаю, что вы можете написать простую оболочку, которая будет правильно устанавливать путь к классам и добавлять любую стороннюю библиотеку в результирующий путь к классам.

Здесь я просто вырезал и вставил образец из вышеуказанной ссылки с добавлением библиотеки в classpath:

<java
        classname="org.apache.tools.ant.launch.Launcher"
        fork="true"
        failonerror="true"
        dir="${sub.builddir}"
        timeout="4000000"
        taskname="startAnt"
>
    <classpath>
        <pathelement location="${ant.home}/lib/ant-launcher.jar"/>
        <pathelement location="/path/to/3rd-party-lib.jar"/>
    </classpath>
    <arg value="-buildfile"/>
    <arg file="${sub.buildfile}"/>
    <arg value="-Dthis=this"/>
    <arg value="-Dthat=that"/>
    <arg value="-Dbasedir=${sub.builddir}"/>
    <arg value="-Dthe.other=the.other"/>
    <arg value="${sub.target}"/>
</java>

Я думаю, вы даже можете повторно использовать один и тот же файл сборки, ссылаясь на ${ant.file}, просто укажите другую цель в качестве точки входа.

EDIT

Я думаю, это решение следует использовать только как последнее средство мера. Если задача в целом поддерживает тег <classpath>, добавьте необходимые библиотеки локально к этой конкретной задаче. Вы дали прекрасный пример этого в своем вопросе с ant-contrib taskdef.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...