Как выполнить ant jar из maven-antrun-plugin - PullRequest
4 голосов
/ 16 апреля 2019

Мы используем Maven в сочетании с файлом Ant build.xml для наших сборок.

Плагин maven-antrun-выглядит следующим образом:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-antrun-plugin</artifactId>
  <!-- Version 1.8 uses Ant 1.9.4 -->
  <version>1.8</version>
  <executions>
    <execution>
      <id>Compile sources</id>
      <phase>compile</phase>
      <goals>
        <goal>run</goal>
      </goals>
      <configuration>
        <target>
          <mkdir dir="${temp.dir}"/>
          <mkdir dir="${dist.dir}"/>
          <exec dir="${project.basedir}" executable="${ant.exec}" failonerror="true">
            <arg
              line="-f xlatedb.ant.xml -DDLC ${dlc} -lib ${lib.dir}
                -Dtarget.dir ${target.dir}
                -Ddist.dir ${dist.dir}
                -Dtemp.dir ${temp.dir}
                -Dproject.version ${project.version} "/>
          </exec>
        </target>
      </configuration>
    </execution>
  </executions>
</plugin>

Maven-antrun-plugin использует Ant 1.9.4 для внутреннего использования. Есть ли способ заменить зависимость от $ {ant.exec} вызовом этого внутреннего ant jar?

Теперь мы передаем ant.exec команде mvn. Использование задачи муравья не работает, потому что мы также должны передать -lib муравью. (папка lib содержит все загруженные зависимости).

Преимущество использования этого подхода ant.exec заключается в том, что мы можем использовать ant 1.10.5. Однако я мог бы указать в зависимостях ant 1.10.5 и загрузить этот jar-файл в папку lib ... Но вместо запуска файла ant.bat мне нужен способ запуска ant с этим jar-файлом 1.10.5.

Ответы [ 3 ]

3 голосов
/ 23 апреля 2019

Вы можете вызвать главный класс ant с помощью exec:java goal

pom.xml

<properties>        
    <target.dir>theTargetDirectory</target.dir>
</properties>
<build>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <version>1.6.0</version>
            <executions>
                <execution>
                    <phase>compile</phase>
                    <goals>
                        <goal>java</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <mainClass>org.apache.tools.ant.launch.Launcher</mainClass>
                <arguments>-f,xlatedb.ant.xml</arguments>
                <systemProperties>
                    <systemProperty>
                        <key>target.dir</key>
                        <value>${target.dir}</value>
                    </systemProperty>
                </systemProperties>
            </configuration>
        </plugin>
    </plugins>
</build>
<dependencies>
    <dependency>
        <groupId>org.apache.ant</groupId>
        <artifactId>ant</artifactId>
        <version>1.10.5</version>
        <scope>compile</scope>
    </dependency>
</dependencies>

xlatedb.ant.xml

<project default="print-version">
    <target name="print-version">
        <echo>${ant.version}</echo>
        <echo>${target.dir}</echo>
    </target>
</project>
mvn compile

Вывод:

--- exec-maven-plugin: 1.6.0: java (по умолчанию) @ stack-55711525-maven-antexec ---
Файл сборки: / xyz / project / xlatedb.ant.xml
версия для печати:
[echo] Apache Ant (TM) версия 1.10.5, скомпилированная 10 июля 2018 года
[echo] theTargetDirectory
BUILD SUCCESSFUL
Общее время: 0секунд


ПРИМЕЧАНИЕ: Если вы хотите, чтобы maven classpath был доступен для ant во время jar, я думаю, вы можете запустить плагин copy-dependencies достаточно рано в жизненном циклеи затем укажите выходной каталог зависимостей как classpath для ant.

например,

<path id="class.path">
  <fileset dir="target">
    <include name="copied-dependencies-dir/*.jar" />
  </fileset>
</path>
0 голосов
/ 25 апреля 2019

Согласно http://svn.apache.org/viewvc/maven/plugins/tags/maven-antrun-plugin-1.8/pom.xml?view=markup

действительно они используют Ant 1.9.4 для версии 1.8 плагина. Вы пытались переопределить это, исключив эту зависимость:

<dependency>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-antrun-plugin</artifactId>
        <version>1.8</version>
        <type>maven-plugin</type>
        <exclusions>
            <exclusion>
                <groupId>org.apache.ant</groupId>
                <artifactId>ant</artifactId>
            </exclusion>
        </exclusions>
</dependency>

и явное добавление желаемой версии?

0 голосов
/ 25 апреля 2019

Возможно, вы могли бы заменить зависимость плагинов от ant 1.9.4 на ant 1.10.5, например:

<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.8</version>
  <dependencies>
    <dependency>
      <groupId>org.apache.ant</groupId>
      <artifactId>ant</artifactId>
      <version>1.10.5</version>
    </dependency>
    <executions>
       ...
    </executions>
    <configuration>
       ...
    </configuration>
  </dependencies>
</plugin>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...