2016-01-31 3 views
1

Я хотел бы запустить сборку Ant build.xml из родительского POM.Запуск внешнего файла Ant из родительского pom

Это может выглядеть следующим образом:

<project> 
    <groupId>my.group</groupId> 
    <artifactId>my-parent</artifactId> 
    <version>1.0.0-SNAPSHOT</version> 
    <packaging>pom</packaging> 

    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-antrun-plugin</artifactId> 
       <executions> 
        <execution> 
         <phase>initialize</phase> 
         <configuration> 
          <tasks> 
           <ant antfile="build.xml"/> 
          </tasks> 
         </configuration> 
         <goals> 
          <goal>run</goal> 
         </goals> 
        </execution> 
       </executions> 
      </plugin> 
     </plugins> 
    </build> 
</project> 

Это прекрасно работает, если я использую этот модуль в качестве родителя ПОМ. Проблема в этой строке <ant antfile="build.xml"/>. Хотя этот POM работает как родительский POM, для плагина нет файла build.xml.

Как запустить скрипт Ant из файла (находится в родительском POM) во время всей дочерней сборки?

PS Я попытался упаковать build.xml под некоторым классификатором, чтобы сделать его доступным для детей. Но я понятия не имею, как я могу извлечь свой упакованный build.xml до antrun:run.

PPS

Структура проекта:

<root> 
    + Parent POM 
    | +- pom.xml 
    | +- build.xml 
    | 
    + Component1 
    | + Child1 
    | | +- src/main/java 
    | | +- ... 
    | | +- pom.xml 
    | | 
    | + Child2 
    | +- src/main/java 
    | +-... 
    | +- pom.xml 
    | 
    + Component2 
    + Child3 
    | +- src/main/java 
    | +- ... 
    | +- pom.xml 
    | 
    + Child4 
     +- src/main/java 
     +-... 
     +- pom.xml 

В качестве бонуса: Я также хотел бы знать ответ на ситуации, когда родитель POM получить построены и развернуты независимо друг от друга (не зная собственного ребенка), а дети создаются, имея доступ только к родительским развернутым артефактам (а не к исходному коду).

+0

Хорошо. Так вы используете Maven из корневого проекта? И можете ли вы опубликовать весь стек, если он есть? – Tunaki

+0

Я запускаю свою сборку из обоих: корневых и дочерних каталогов. Исключением, которое я получаю, является 'java.io.FileNotFoundException: \ Component1 \ Child2 \ build.xml' –

+1

Что вы имеете в виду от обоих? Обычно вы должны запускать 'mvn clean install' только с' '. – Tunaki

ответ

1

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

Например, в ваших родителях POM конфигурация будет выглядеть следующим образом:

<properties> 
    <ant.build.dir.prefix></ant.build.dir.prefix> 
</properties> 

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-antrun-plugin</artifactId> 
      <executions> 
       <execution> 
        <phase>initialize</phase> 
        <configuration> 
         <tasks> 
          <ant antfile="${ant.build.dir.prefix}build.xml" /> 
         </tasks> 
        </configuration> 
        <goals> 
         <goal>run</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
</build> 

Обратите внимание на префиксе ${ant.build.dir.prefix} добавлена ​​в муравьиный вызов. По умолчанию он будет пустым, что означает, что файл должен находиться в том же каталоге, что и pom.

Однако в модулях вам просто нужно будет переопределить значение свойства, следующим образом:

<properties> 
    <ant.build.dir.prefix>..\</ant.build.dir.prefix> 
</properties> 

Или любой другой относительный путь в иерархии папок.

Во время выполнения значение будет заменено, и таким образом путь к файлу ant будет динамически изменяться, обеспечивая общую и централизованную конфигурацию запуска ant (в родительском pom) и определенную конфигурацию пути в модулях (через префикс свойства).

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

+0

@BorisBrodski это помогло? –

+0

Извините, я не знаю точно. Я закончил использовать https://github.com/jdcasey/directory-maven-plugin плагин, поскольку он дал мне больше гибкости и был проще настроить. –