繁体   English   中英

做Maven构建的Ant任务-但使用与其他Ant脚本不同的Java版本

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM