JDK 7将自身报告为JRE(通过“java.home”系统属性)

时间:2013-06-12 08:57:59

标签: windows java

我刚刚安装了最新的JDK 7 Update 21并编写了以下单行程序(在Windows 7上):

public static void main(String[] args) {
    System.out.println("java.home = " + System.getProperty("java.home"));
}

输出(令人惊讶):

java.home = D:\Java\jdk1.7.0_21\jre

我相信我解决了所有常见原因:

  1. JAVA_HOME设置为“D:\ Java \ jdk1.7.0_21”
  2. 我已将“D:\ Java \ jdk1.7.0_21 \ bin”设置为系统路径设置中的第一个路径。
  3. Windows \ System32
  4. 中没有java.exe
  5. 我正在使用“新鲜”命令行
  6. 我已广泛搜索此网站和其他网站
  7. 我的注册表不包含“HKEY_LOCAL_MACHINE \ SOFTWARE \ JavaSoft \ Java运行时环境”键。 “HKEY_LOCAL_MACHINE \ SOFTWARE \ JavaSoft \ Java Development Kit \ 1.7”的值包含正确的“JavaHome”值。
  8. 在java.exe调用中添加“-server”选项不会更改输出
  9. 以下是您的信息的更多输出

    D:\Temp>echo %PATH%
    d:\Java\jdk1.7.0_21\bin
    
    D:\Temp>echo %JAVA_HOME%
    D:\Java\jdk1.7.0_21
    
    D:\Temp>type SystemInfo.java
    public class SystemInfo {
    
            public static void main(String[] args) {
                    System.out.println("java.home = " + System.getProperty("java.home"));
            }
    
    }
    
    D:\Temp>java -verbose SystemInfo
    [Opened d:\Java\jdk1.7.0_21\jre\lib\rt.jar]
    [Loaded java.lang.Object from d:\Java\jdk1.7.0_21\jre\lib\rt.jar]
    [Loaded java.io.Serializable from d:\Java\jdk1.7.0_21\jre\lib\rt.jar]
    ...
    [Loaded java.lang.Void from d:\Java\jdk1.7.0_21\jre\lib\rt.jar]
    java.home = d:\Java\jdk1.7.0_21\jre
    [Loaded java.lang.Shutdown from d:\Java\jdk1.7.0_21\jre\lib\rt.jar]
    [Loaded java.lang.Shutdown$Lock from d:\Java\jdk1.7.0_21\jre\lib\rt.jar]
    

    (更新:) 基本上我需要知道,如何运行我的java应用程序,以便它可以访问java编译器(在JDK的tools.jar中找到),而无需将JAR复制到其他地方。

    BTW这背后的主要问题是我的jetty无法编译JSP,因为缺少java编译器。我知道我可以将“tools.jar”添加到JRE \ lib \ ext,但这不是一个长期的解决方案。

2 个答案:

答案 0 :(得分:6)

默认情况下,这是在Java HotSpot解释器的C ++代码中指定的。此外,Sun最初希望系统属性在环境的Java主目录指向JDK时设置。

请参阅Java(TM) Tutorials for System Properties,其中java.home系统属性描述为“Java Runtime Environment(JRE)的安装目录”。另请注意,Oracle's Java 7 Javadoc for Class System是错误的(骇然!),它将java.home系统属性描述为“Java安装目录”。

答案取决于line 309 of the actual JVM code

答案 1 :(得分:0)

你看到的输出完全没问题 - 它是你默认的Java执行环境。

为了配置jetty以使用您的JDK,可能this有帮助。