Есть ли способ вызвать цель ant 'ant' с опцией -lib? - PullRequest
0 голосов
/ 24 ноября 2010

Я разрабатываю сценарий ant, который вызывает другой сценарий ant, используя задачу <ant>. Этот сценарий ant является установщиком продукта Java и должен использоваться нашими клиентами, для которых ant будет установлен отдельно.

В вызываемом скрипте используется задача antlr <antlr:ant-antlr3>. Для этого я должен поместить файл ant-antlr3.jar в каталог ant lib, а также добавить antlr-3.2.jar в путь к классам.

Но я не хочу иметь такую ​​зависимость наличия файла ant-antl3.jar в собственной установленной версии клиента ant.

Есть ли способ предоставить эквивалентную опцию командной строки ant -lib для указания других путей для jar-файлов, добавляемых в antlib с помощью самой задачи <ant>?

Я посмотрел на онлайн-документы, и, похоже, нет выхода.

Спасибо

Ответы [ 2 ]

1 голос
/ 24 ноября 2010

Ответ Тима дает большую часть истории, но чтобы запустить Ant и установить параметры JVM, вам нужно вызвать его с помощью задачи java .

Есть пример работает таким образом в документации Ant, здесь слегка изменено, чтобы включить -lib:

<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"/>
    </classpath>
    <arg value="-lib"/>
    <arg value="${path.to.your.antlr.jar}"/>
    <arg value="-buildfile"/>
    <arg file="${sub.buildfile}"/>
    <arg value="${sub.target}"/>
</java>
1 голос
/ 24 ноября 2010

Я считаю, что приемлемый способ сделать это - вручную настроить ваш путь к классам в файле сборки, а не включать его неявным образом через глобальный каталог ant lib.то есть

<path id="master-classpath">
    <fileset dir="${lib}" />
    <fileset file="${findbugs-base}/lib/annotations.jar" />
    <pathelement location="${build-classes}" />
</path>

Вы можете использовать этот элемент пути в любой задаче, которая может принимать аргументы classpath, такие как javac

<javac
        destdir="${out}"
        source="1.5"
        target="1.5"
        debug="true">
    <src path="${src}" />
    <classpath refid="master-classpath" />
</javac>

Таким образом, глобальная настройка муравья независимость, и вы можете указать любые файлы, которые вам могут понадобиться для любой сборки, настолько конкретно, насколько вам нужно (вплоть до данного вызова или цели).

Очевидно, что все это должно выполняться в сборкефайл, который вы вызываете из файла сборки клиента.Таким образом, когда вы обращаетесь к своему, путь к классу будет настроен именно так, как вы хотите.

Еще одна гораздо менее идиоматическая возможность - буквально раскошелиться с Exec Task и вызыватьмуравей таким образом.Очевидно, что с предоставлением задачи Ant разработчики ant не рекомендуют вам этого делать.Тем не менее, это вариант.

...