我们的Ant构建是使用Java 1.7.0的JAVA_HOME运行。 这样的javac和所有其它Java依赖的目标默认使用了正确的Java。
但是,从外部供应商1个蚂蚁目标不支持(或者说有一个bug)使用Java 1.7.0。 而不像如javac的或分叉的JUnit,这个目标不支持参数切换JVM。
是否有可能在不同的JVM运行特定的Ant目标?
我们的Ant构建是使用Java 1.7.0的JAVA_HOME运行。 这样的javac和所有其它Java依赖的目标默认使用了正确的Java。
但是,从外部供应商1个蚂蚁目标不支持(或者说有一个bug)使用Java 1.7.0。 而不像如javac的或分叉的JUnit,这个目标不支持参数切换JVM。
是否有可能在不同的JVM运行特定的Ant目标?
为了让珍妮Boyarsky的使用的建议exec
Ant任务具体,下面的例子包装了exec
任务中宏与不同的JVM,以简化您的呼叫目标。 请注意,JVM使用Ant的环境变量设置JAVACMD
。
<?xml version="1.0" encoding="UTF-8"?>
<project name="run-target-with-specified-java-version" default="test">
<macrodef name="exec-target">
<attribute name="antfile" default="${ant.file}" />
<attribute name="target" />
<attribute name="jvm" default="${java.home}/bin/java" />
<sequential>
<exec executable="ant">
<env key="JAVACMD" value="@{jvm}" />
<arg line='-f "@{antfile}"' />
<arg line="@{target}" />
</exec>
</sequential>
</macrodef>
<target name="echo-java-version">
<echo message="Java version: ${java.version}" />
</target>
<target name="test">
<exec-target target="echo-java-version" />
<property name="java1.6"
location="/usr/lib/jvm/jdk1.6/bin/java" />
<exec-target target="echo-java-version" jvm="${java1.6}" />
</target>
</project>
test:
[exec] Buildfile: /home/your/project/build.xml
[exec]
[exec] echo-java-version:
[exec] [echo] Java version: 1.7.0
[exec]
[exec] BUILD SUCCESSFUL
[exec] Total time: 0 seconds
[exec] Buildfile: /home/your/project/build.xml
[exec]
[exec] echo-java-version:
[exec] [echo] Java version: 1.6.0
[exec]
[exec] BUILD SUCCESSFUL
[exec] Total time: 0 seconds
BUILD SUCCESSFUL
Total time: 2 seconds
您可以使用exec任务运行与定义的参数运行目标构建文件。 这可能是在不同的JVM上运行,因为你可以通过JVM给exec调用。
请注意,你必须要重构目标依赖于文件进行通信,而不是设置属性。 由于这将是一个不同的JVM,这显然不能靠记忆。
您可以在不同的JVM(我们做这一切的时候)运行的目标。 你只需要使用叉:
<javac srcdir="${src}"
destdir="${build}"
fork="yes"
/>
但我感到大家都知道这一点,所以怎么样运行外部Ant任务,因为它是和他们的休息(可以说你有3个以上的javac任务)你想要的JVM。 这可以通过设置一个属性文件来实现。 见javac任务
它可以使用不同的编译器。 这可以通过设置全局build.compiler财产,这将影响整个构建所有任务中指定
所以这个属性会影响你的3个任务,并在JVM上运行它们,你指定的(比如说1.7),你可以设置默认JAVA_HOME到无论你的外部库的任务需求。