[英]Java compiler under Eclipse/Ant defaults to %JAVA_HOME%?
我最近遇到了一个构建环境行为,我需要更好地了解它:
我新安装的工作站概述:
C:\\Program Files\\Java\\jdk1.8.0_131\\
C:\\Program Files\\Java
:jdk1。 7 .0_45,jre1。 7 .0_76,jre1。 7 .0_79。 我的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.