[英]Ant task to do a Maven build - but use a different version of Java than the rest of the Ant script
你好
我正在尝试将Maven构建包括到我的Ant构建中。 当我仅使用涉及的Ant任务(使用Maven Ant插件)时 ,就可以顺利进行。
我的问题是我的Maven代码包括一个1.6依赖的.jar文件,但是我的Ant脚本是1.5依赖的,因此如果使用1.6运行将失败。 因此,我必须创建一个进程来切换JVM以在我的Ant脚本中运行我的Maven目标。
我尝试过:在我的主POM的build部分中添加一个插件来自定义编译器:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.5.1</version>
<configuration>
<executable>"c:\Program Files (x86)\Java\jdk1.6.0_45\bin\javac.exe"</executable>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
这不起作用,因为它说-s有问题。 我已经检查过了,这是javac的Java 1.6参数,在1.5中不存在! 因此,它正在为1.6创建javac调用,然后使用1.5 javac运行它。 另外,我宁愿仅编辑Ant脚本来执行此操作。
我还尝试过<property>和<sysproperty>(在Java调用中)和<arg>的每种组合来设置PATH和JAVA_HOME变量,但是它们似乎无法按照我需要的方式工作。 难道这不可能吗? 我什至将<java>标记的JVM属性设置为针对1.6 Java运行,但是Maven调用该Javac似乎仍然存在问题。
提前致谢。
为了方便起见,这是Maven站点中的部分(略作抛光):
<macrodef name="maven">
<attribute name="options" default="" />
<attribute name="goal" />
<attribute name="basedir" />
<attribute name="resultproperty" default="maven.result" />
<element name="args" implicit="true" optional="true" />
<sequential>
<java classname="org.codehaus.classworlds.Launcher" fork="true" dir="@{basedir}" resultproperty="@{resultproperty}">
<jvmarg value="-Xmx512m"/>
<classpath>
<fileset dir="${maven.home}/boot"><include name="*.jar" /></fileset>
<fileset dir="${maven.home}/lib"><include name="*.jar" /></fileset>
</classpath>
<sysproperty key="classworlds.conf" value="${maven.home}/bin/m2.conf" />
<sysproperty key="maven.home" value="${maven.home}" />
<arg line="--batch-mode @{options} @{goal}" />
</java>
</sequential>
</macrodef>
<target name="my_maven_target">
<maven basedir="${basedir}" options="${maven.opts}" goal="install" resultproperty="maven.build.result"/>
</target>
您应该尝试使用ant exec Task来实现。 在此处查找以前的详细答案: 在不同的jvm中运行ant任务
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.