2012-07-18 103 views
6

我需要编译我的源代码以与jre 1.6兼容。但是,当我尝试将javac任务的编译器属性设置为javac1.6时,ant仍然会使用javac1.7编译我的代码。我也尝试将编译器版本设置为“现代”,并没有帮助。如何将Ant编译器更改为JDK 1.6

<target name="compile-tests"> 
    <javac compiler="javac1.6" includeantruntime="false" srcdir="${test.dir}" 
    destdir="${build.dir}" > 
     <classpath refid="class.path" /> 
    </javac> 
</target> 

我JAVA_HOME设置为JDK 1.6:

echo $JAVA_HOME </code> gives: <code> 
/usr/lib/jvm/java-6-openjdk-amd64/ 

我的蚂蚁版本是: Apache Ant的(TM)版本1.8.2

this post,蚂蚁使用它自己的编译器。我如何覆盖蚂蚁默认? 此外,根据this post和ant文档,我可以设置全局build.compiler属性。我该如何设置该属性,我该怎么做?

回答

5

我觉得蚂蚁compiler属性只是知道哪些属性是由编译器支持。在javac中,通常传递给编译器的属性或选项是target

你甚至不需要安装Java 6编译器。

+0

“你甚至不需要安装Java 6编译器。” ? – 2015-08-17 18:02:39

+0

@BlessedGeek是的,如果您有Java 7,8或(可能)更高版本,您应该可以使用'target'属性。 – madth3 2015-08-20 00:21:56

24

javac任务,试图通过设置executable属性如下指定Java编译器:

<property name="JDK1.6.dir" location="/usr/lib/jvm/java-6-openjdk-amd64" /> 
<property name="javac1.6" location="${JDK1.6.dir}/bin/javac" /> 

<target name="compile-tests"> 
    <javac executable="${javac1.6}" 
     fork="yes" 
     includeantruntime="false" 
     srcdir="${test.dir}" 
     destdir="${build.dir}" > 
    <classpath refid="class.path" /> 
    </javac> 
</target> 
+0

谢谢。这可以覆盖编译器。你回答了我的问题。 – user847352 2012-07-19 17:14:25

1

使用Ant javac任务的“target”属性来定义您希望类文件兼容的Java版本(因此在您的情况下将其设置为“1.6”)。有关更多详细信息,请参阅task documentation

0

谈到Ant的基础知识,因为它需要JVM才能运行,所以它足以让它识别出JRE。但是,如果构建过程需要编译类,那么它将依赖于Java编译器,如果它没有找到,那么构建将失败。

可以将Ant设置为使用多个Java编译器中的一个,但是我将关注Oracle的javac以获得下面的解释。以下是替代方案...

1)如果Ant为其执行所识别的JRE是JDK下的子目录,则它将升至JDK级别并标识所需的资源。

2)如果JAVA_HOME环境变量设置指向JVM(未JRE)然后蚂蚁将能够编译Java工件

3)可选地,如每Ant文档,JAVACMD可以以分批设置文件特定于操作系统(Windows的antrc_pre.bat)放置在您的主目录下(而不是Ant),那么它将识别JVM。请注意JAVACMD应该引用bin文件夹下的Java.exe完整路径,而不是JVM home。

4)或者,Ant命令行可以使用-l选项获取库列表。将tools.jar传递给-l选项就足够了。

5)最后,可以如上所述设置JavaC任务的fork属性。请记住,这是资源密集型的,不推荐。