繁体   English   中英

Eclipse / Ant下的Java编译器默认为%JAVA_HOME%?

[英]Java compiler under Eclipse/Ant defaults to %JAVA_HOME%?

我最近遇到了一个构建环境行为,我需要更好地了解它:

我新安装的工作站概述:

  1. 安装了jdk1。 6 .0_45,然后是jdk1。 7 .0_80,然后是jdk1。 8 .0_131。
  2. %JAVA_HOME%设置为C:\\Program Files\\Java\\jdk1.8.0_131\\
  3. 已安装Eclipse Kepler(4.3.2)
  4. 然后,我手动(通过解压缩)将以下内容添加到C:\\Program Files\\Java :jdk1。 7 .0_45,jre1。 7 .0_76,jre1。 7 .0_79。
  5. 检出了一个基于Ant的旧项目,该项目旨在仅在JRE7下运行。

我的Eclipse的Window > Preferences > Java > Installed JREs现在看起来如下:

在此处输入图片说明

执行环境是标准的 (即我没有添加任何环境):

在此处输入图片说明

现在,当我用鼠标右键单击该项目的build.xml并运行Ant构建...我可以看到使用的执行环境jre7 (jdk1 7 .0_80)作为其默认选择:

在此处输入图片说明

因此,当我单击“应用”,然后单击“运行”时,它将使用Java 7编译器,对吗?

错误。 由于某些奇怪的原因,此构建生成的所有.class文件都具有Java 8的major_version

我通过build.xml通过强行强制Ant使用Javac 1.7解决了这个问题:

<property name="ant.build.javac.source" value="1.7"/> 
<property name="ant.build.javac.target" value="1.7"/>

我的问题是: 尽管执行环境设置为JDK7, 为什么在JDK8下运行的Eclipse中的构建仍默认为JRE8?

IOW,这是有文件记录的功能吗? 如果是这样,我在哪里可以了解更多信息?


更新:

感谢下面的回答,我试图验证%JAVA_HOME%在Ant执行中的作用。 从外部更改工作站的%JAVA_HOME%系统变量将违反设置的目的,因此我尝试仅更改%JAVACMD% 那没有帮助。 因此,我在build.xml回显了相关的环境变量:

<target name="jdk_version_validation">
    <echo message="Java Version: ${java.version}" />
    <echo message="Java home: ${java.home}" />
    <echo message="JAVA_HOME: ${env.JAVA_HOME}" />
    <echo message="JAVACMD: ${env.JAVACMD}" />
</target>

这就是我得到的:

jdk_version_validation:
     [echo] Java Version: 1.7.0_80
     [echo] Java home: C:\Program Files\Java\jre7
     [echo] JAVA_HOME: C:\Program Files\Java\jdk1.8.0_131\
     [echo] JAVACMD: C:\Program Files\Java\jdk1.7.0_80\bin

在没有上述强行覆盖属性的情况下,这仍然会生成Java 8类文件。 惊人。

您列出的很多东西似乎都是JRE(不包含javac编译器)。 因此,Ant可能会放弃使用JAVA_HOME中列出的1.8 JDK。

您可以尝试使用JavaSE-1.7执行环境,并实际上在“兼容的JRE”列表中选择一个JDK作为默认的JDK。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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