如何从maven-antrun-plugin执行ant jar
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何从maven-antrun-plugin执行ant jar相关的知识,希望对你有一定的参考价值。
我们将Maven与Ant build.xml文件结合使用,用于构建。
maven-antrun-plugin看起来像这样:
<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 jar来替换$ {ant.exec}的依赖?
现在我们将ant.exec传递给mvn命令。使用ant任务不起作用,因为我们还需要将-lib传递给ant。 (lib文件夹包含所有下载的依赖项)。
使用这种ant.exec方法的优点是我们可以使用ant 1.10.5。然而,我可以在依赖项中指定ant 1.10.5并将该jar文件下载到lib文件夹中...但是不需要启动ant.bat文件,我需要一种方法来启动该1.10.5 jar的ant。
你可以通过exec:java
目标调用ant主类
pom.hml
<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 --- Buildfile:/xyz/project/xlatedb.ant.xml 打印版本: [echo] Apache Ant(TM)版本1.10.5于2018年7月10日编译 [echo] theTargetDirectory 建立成功 总时间:0秒
注意:如果你想在jar
期间为ant提供maven类路径,我想你可以在生命周期中尽早运行copy-dependencies
插件,然后将依赖关系输出目录作为类路径提供给ant。
EG
<path id="class.path">
<fileset dir="target">
<include name="copied-dependencies-dir/*.jar" />
</fileset>
</path>
你可以用ant 1.10.5替换对ant 1.9.4的插件依赖,如:
<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>
根据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>
并明确添加您想要的版本?
以上是关于如何从maven-antrun-plugin执行ant jar的主要内容,如果未能解决你的问题,请参考以下文章
maven-antrun-plugin 1.6 想用Java 1.4.2 版本编译类
使用 maven-antrun-plugin 指定代理以使用 maven 对 jar 进行签名
带有 maven-antrun-plugin 的 Maven Ant BuildException ...无法找到 javac 编译器