如何将Ant编译器更改为JDK 1.6

时间:2012-07-18 23:08:10

标签: java ant

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

<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,ant使用自己的编译器。如何覆盖ant默认值? 另外,根据this post和ant文档,我可以设置全局build.compiler属性。我该怎样设置该属性,我该怎么做?

5 个答案:

答案 0 :(得分:32)

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>

答案 1 :(得分:5)

我认为Ant compiler属性只是为了知道编译器支持哪些属性。在javac中,传递给编译器的属性或选项是target

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

答案 2 :(得分:2)

我认为最好为这个问题添加一个更新的答案,因为我最近解决了与此问题有关的许多头痛问题。我的特定用例:我的计算机使用JRE1.8,但是我需要使用ant来针对服务器上运行的JRE1.7。对我来说,诀窍是结合使用以下属性(引用documentation):

  • srcdir :Java文件的位置。
  • 目标目录:用于存储类文件的位置。
  • includeantruntime :是否在类路径中包含Ant运行时库。 通常最好将其设置为false,以便脚本的行为对运行它的环境不敏感。
  • :编译器接受的Java语言功能
  • 目标:为特定的JVM版本(交叉编译)生成类文件。
  • fork :是否在外部使用JDK编译器执行javac。
  • 编译器:要使用的编译器实现。

除非您确实有特定的依赖项(例如,较新的企业版本而不是最新的免费版本),否则您不必指定可执行文件。

示例:

<javac srcdir="${source}"
       destdir="${java.output.dir}"
       includeantruntime="false"
       source="1.7"
       target="1.7"
       fork="yes"
       compiler="javac1.7">
</javac>

答案 3 :(得分:1)

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

答案 4 :(得分:0)

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

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

1)如果Ant认可其执行的JRE是JDK下的子目录,它将提升到JDK级别并识别所需的资源。

2)如果JAVA_HOME环境变量设置为指向JVM(而不是JRE),那么ant将能够编译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属性。请记住,这是资源密集型的,不推荐使用。