Как обернуть конструкцию Ant с Maven?
Мы используем maven для нашего крупнотонкого продукта. Все наши артефакты развернуты в общий репозиторий архива, используя цель развертывания maven. Теперь я интегрирую сторонний продукт с конструкцией ant. Я знаю, как вызывать ant цели из maven с помощью antrun-плагина, но я не уверен, как настроить pom в этом экземпляре. Я не хочу, чтобы maven фактически генерировал артефакт, но я хочу, чтобы он вытащил артефакт, который был создан ant, когда запускается цель развертывания maven.
Я планирую, что pom примыкает к build.xml. Pom будет использовать плагин antrun в цели пакета, чтобы вызвать цель ant в соответствующее время, чтобы построить артефакт .war.
Вопросы:
a) Я создаю файл .war, но он создается через ant, а не Maven, поэтому иметь тип боевой упаковки в pom не имеет смысла. Каким должен быть мой тип упаковки?
b) Как заставить maven вытащить артефакт из моего выходного каталога ant для цели развертывания?
c) Если нет хороших ответов на A и B, существуют ли ant задачи, которые реплицируют функции развертывания maven для получения моего артефакта .war в общий репозиторий?
Ответы
Ответ 1
Вы можете использовать maven-antrun-plugin для запуска сборки ant. Затем используйте плагин build-helper-maven-plugin, чтобы прикрепить банку, созданную ant, к проекту. Прикрепленный артефакт будет установлен/развернут вместе с помпой.
Если вы укажете свой проект с упаковочным pom
, Maven не будет конфликтовать с муравьиной сборкой.
В приведенном ниже примере предполагается, что ant build.xml находится в src/main/ant, имеет цель compile
и выводится в ant-output.jar
.
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<phase>process-resources</phase>
<configuration>
<tasks>
<ant antfile="src/main/ant/build.xml" target="compile"/>
</tasks>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>1.3</version>
<executions>
<execution>
<id>add-jar</id>
<phase>package</phase>
<goals>
<goal>attach-artifact</goal>
</goals>
<configuration>
<artifacts>
<artifact>
<file>${project.build.directory}/ant-output.jar</file>
<type>jar</type>
</artifact>
</artifacts>
</configuration>
</execution>
</executions>
</plugin>
Ответ 2
Фактически вы можете связать проект ANT с Maven, используя несколько ANT целей запуска, как я писал в другом вопросе. Предполагая, что ваш существующий проект ANT имеет задачи очистки и сборки, это может быть полезным способом обертывания проекта, чтобы вы могли использовать цели maven и сопоставлять их с существующим кодом ANT.
Ответ 3
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-install-plugin</artifactId>
<version>2.3.1</version>
<executions>
<execution>
<id>install-library</id>
<phase>install</phase>
<goals>
<goal>install-file</goal>
</goals>
<configuration>
<groupId>x.x</groupId>
<artifactId>ant-out-atifacts</artifactId>
<version>${project.version}</version>
<file>ant-output.jar</file>
<packaging>zip</packaging>
</configuration>
</execution>
</executions>
</plugin>
Ответ 4
Обратите внимание: Почему вы должны использовать Maven Ant Задачи вместо Maven или Ivy.
И конкретно, как вызвать вызов Maven из Ant можно найти в этом примере:
http://code.google.com/p/perfbench/source/browse/trunk/perfbench/grails-gorm/build.xml
С приведенной выше информацией вы сможете достичь того, что вам нужно. Дайте мне знать, если у вас есть вопросы.