gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 07:54:06 27 4
gpt4 key购买 nike

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

我新安装的工作站概览:

  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 现在看起来是:

enter image description here

执行环境是standard (即我没有添加任何内容):

enter image description here

现在,当我右键单击项目的 build.xml 并运行 Ant Build... 我可以看到一个使用 jre7 (jdk1. 7.0_80) 作为默认选择:

enter image description here

那么,当我点击应用,然后点击运行时,它会使用 Java 7 编译器,对吗?

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

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

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

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

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 作为默认值。

关于Eclipse/Ant 下的 Java 编译器默认为 %JAVA_HOME%?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44306338/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com