Могу ли я найти и импортировать файлы в сборочный файл Ant во время выполнения? - PullRequest
1 голос
/ 13 ноября 2008

Я хочу создать сборочный файл Ant, который включает некоторые файлы в качестве своего рода плагина.

Поэтому, если я хочу активировать функцию в проекте, скажем, pmd-checking, я копирую pmd.xml в каталог, и build.xml сразу начинает понимать, что pmd.xml существует и импортирует его так что новые цели могут быть доступны для сборки.

Но задачу import можно использовать только как задачу верхнего уровня, поэтому я понятия не имею, как реализовать эту функциональность. Возможно ли это с помощью Ant, и если да, то как я могу это сделать?

РЕДАКТИРОВАТЬ: Я бы предпочел решение, которое позволяет новым целям отображаться в списке, представленном ant -p.

Ответы [ 4 ]

3 голосов
/ 13 ноября 2008

В документации по задаче import обратите внимание на атрибут optional. Установите это значение на true, и пропущенные включения не повредят сборку.

Таким образом, pmd.xml включается, если найден, но не нарушает сборку, если это не так.

Не проверено, поэтому я не уверен в ant -p, включая цели в импортированном файле, если он найден.

3 голосов
/ 13 ноября 2008

Вы можете использовать задачу ant и даже параметризировать имя цели. Вот пример:

<ant antfile="plugins/pmd.xml" target="${pmd-target}"/>

Если вам нужна большая гибкость, я рекомендую проверить gant или gradle .

2 голосов
/ 09 января 2011

Это явно не указано в документации по задаче импорта, но задача принимает набор файлов в качестве альтернативы отдельному файлу. Следовательно, на верхнем уровне это должно сработать, а созданные цели перечислены как ant -p:

<property name="plugins.dir" value="plugins" />
<fileset id="plugin.modules" dir="${plugins.dir}">
    <include name="**/*.xml" />
</fileset>

<import>
    <fileset refid="plugin.modules" />
</import>

Один недостаток в том, что в каталоге 'plugins' должен быть хотя бы один плагин, иначе импорт не удастся. Вы можете просто создать файл-заполнитель - скажем, с именем empty.xml:

 <project />

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

0 голосов
/ 13 ноября 2008

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

Но я бы взглянул на проект ant-contrib . Он имеет условную задачу <if>, которая может заставить импорт верхнего уровня работать только тогда, когда вы этого хотите.

...