Подтвердить что ты не робот

Как обернуть конструкцию 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 в общий репозиторий?

4b9b3361

Ответ 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

С приведенной выше информацией вы сможете достичь того, что вам нужно. Дайте мне знать, если у вас есть вопросы.