Eclipse/Ant下的Java编译器默认为%JAVA_HOME%? [英] Java compiler under Eclipse/Ant defaults to %JAVA_HOME%?

查看:27
本文介绍了Eclipse/Ant下的Java编译器默认为%JAVA_HOME%?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

我新安装的工作站概述:

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

My Eclipse 的 Window >首选项 >爪哇>已安装的 JRE 现在看起来:

执行环境是

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

所以,当我点击 Apply 和 Run 时,它会使用 Java 7 编译器,对吧?

错了.出于某种奇怪的原因,此构建生成的所有 .class 文件都有一个 Java 8 的主要版本

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

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

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

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

<小时>

更新:

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

<echo message="Java 版本:${java.version}"/><echo message="Java home: ${java.home}"/><echo message="JAVA_HOME: ${env.JAVA_HOME}"/><echo message="JAVACMD: ${env.JAVACMD}"/></目标>

这就是我得到的:

jdk_version_validation:[echo] Java 版本:1.7.0_80[echo] Java 主页:C:Program FilesJavajre7[echo] JAVA_HOME: C:Program FilesJavajdk1.8.0_131[echo] JAVACMD: C:Program FilesJavajdk1.7.0_80in

如果没有上面描述的蛮力属性覆盖,这仍然会生成 Java 8 类文件.太棒了.

解决方案

您列出的许多内容似乎都是 JRE(不包含 javac 编译器).因此,Ant 可能会重新使用 JAVA_HOME 中列出的 1.8 JDK.

您可以尝试使用 JavaSE-1.7 执行环境,并在兼容 JRE"列表中选择您拥有的默认 JDK.

I recently encountered a build environment behavior that I need to better understand:

Overview of my freshly installed workstation:

  1. Installed jdk1.6.0_45, then jdk1.7.0_80, then jdk1.8.0_131.
  2. %JAVA_HOME% is set to C:Program FilesJavajdk1.8.0_131
  3. Installed Eclipse Kepler (4.3.2)
  4. I then manually (by way of unzipping) added to C:Program FilesJava the following: jdk1.7.0_45, jre1.7.0_76, jre1.7.0_79.
  5. Checked out a legacy Ant-based project, designed to run under JRE7 only.

My Eclipse's Window > Preferences > Java > Installed JREs now looks:

Execution environments are standard (i.e. I have not added any):

Now, when I right-click the project's build.xml and run that Ant Build... I can see that an execution environment that uses jre7 (jdk1.7.0_80) as its default, is selected:

So, when I click Apply, then Run, it will use a Java 7 compiler, right?

Wrong. For some strange reason, all .class files generated by this build have a major_version of Java 8!

I solved this problem by brute-forcing Ant to use Javac 1.7, via build.xml:

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

My question is: Why would a build in Eclipse running under JDK8 default to JRE8 despite Execution Environment set to JDK7?

IOW, is this a documented feature? If so, where can I learn more about this?


Update:

Thanks to the answer below, I tried to verify the role of %JAVA_HOME% in Ant's execution. Externally changing my workstation's %JAVA_HOME% system variable would be defeating the purpose of my setup, so I tried changing %JAVACMD% only. That didn't help. So, I echoed relevant env vars in my 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>

and this is what I got:

jdk_version_validation:
     [echo] Java Version: 1.7.0_80
     [echo] Java home: C:Program FilesJavajre7
     [echo] JAVA_HOME: C:Program FilesJavajdk1.8.0_131
     [echo] JAVACMD: C:Program FilesJavajdk1.7.0_80in

Without the brute-force property overriding described above, this still produces Java 8 class files. Amazing.

解决方案

A lot of those things you list appear to be JREs (which don't contain a javac compiler). So Ant is probably falling back on using the 1.8 JDK listed in JAVA_HOME.

You could try using the JavaSE-1.7 Execution Evironment and actually select the one JDK you have as the default in the 'Compatible JREs' list.

这篇关于Eclipse/Ant下的Java编译器默认为%JAVA_HOME%?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆