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

查看:195
本文介绍了Eclipse / Ant下的Java编译器默认为%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\ 然后手动(通过解压缩的方式)添加到 C:\\($)
  3. 安装Eclipse Kepler(4.3.2)

  4. < \\ Program Files \Java
    以下内容:jdk1。 7 .0_45,jre1。 7 .0_76,jre1。 7 .0_79。
  5. 查看了一个基于Ant的项目,仅在JRE7下运行。

我的Eclipse的窗口>首选项> Java>安装的JRE 现在看起来:





执行环境是



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



的Java 8!



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

 < property name =ant.build.javac.sourcevalue = 1.7\" /> 
< property name =ant.build.javac.targetvalue =1.7/>

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



IOW,这是一个记录的功能吗?如果是,在哪里可以了解更多信息?






更新:



感谢下面的答案,我试图验证%JAVA_HOME%在Ant的执行中的作用。外部更改工作站的%JAVA_HOME%系统变量将会破坏我的设置的目的,所以我尝试更改 %JAVACMD%。那没有帮助所以,我回覆了我的 build.xml 中的相关env var:

  < target name =jdk_version_validation> 
< echo message =Java版本:$ {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版本: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执行环境,实际选择您拥有的一个JDK 兼容JRE列表中的默认值。


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 Files\Java\jdk1.8.0_131\
  3. Installed Eclipse Kepler (4.3.2)
  4. I then manually (by way of unzipping) added to C:\Program Files\Java 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 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

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天全站免登陆