用于执行Maven构建的Ant任务 - 但使用与Ant脚本的其余部分不同的Java版本

时间:2014-01-21 14:55:49

标签: java maven ant javac

您好,

我正在尝试将Maven构建包含在我的Ant构建中。当我使用Maven Ant plugin时只使用Ant任务时,我就可以了。

我的问题是我的Maven代码包含一个1.6依赖的.jar文件,但我的Ant脚本依赖于1.5,因此如果运行1.6则会失败。所以我必须创建一个流程来切换JVM以在我的Ant脚本中运行我的Maven目标。

我试过了: 将插件添加到我的主POM的构建部分,该部分自定义编译器:

<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脚本来执行此操作。

我也尝试了&lt; property&gt;的每个组合。和&lt; sysproperty&gt; (在Java调用中)和&lt; arg&gt;设置PATH和JAVA_HOME变量,但它们似乎不像我需要的那样工作。这是不可能的吗?我甚至设置了&lt; java&gt;的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>

1 个答案:

答案 0 :(得分:0)

您应该尝试使用ant exec Task。请在此处查看之前的详细答案:Run ant task in different jvm