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

标签 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”设置为系统 PATH 设置中的第一个路径。
  3. Windows\System32下没有java.exe
  4. 我正在使用“全新”命令行
  5. 我广泛搜索了这个网站和其他网站
  6. 我的注册表不包含“HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment”项。 “HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Development Kit\1.7”的值包含正确的“JavaHome”值。
  7. 向 java.exe 调用添加“-server”选项不会改变输出

这里还有一些输出供您引用

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 复制到其他地方。

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

最佳答案

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

参见 Java(TM) Tutorials for System Properties其中将 java.home 系统属性描述为“Java 运行时环境 (JRE) 的安装目录”。另外,请注意 Oracle's Java 7 Javadoc for Class System是错误的(惊呆了!),它将 java.home 系统属性描述为“Java 安装目录”。

答案在 line 309 of the actual JVM code 上!

关于windows - JDK 7 将自身报告为 JRE(通过 "java.home"系统属性),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17061482/

相关文章:

c - c mktime 在 Windows 和 GNU/Linux 上是否不同?

java - JQuantlib 缺少扩展

java - Collection<?> 和 Collection<T> 有什么区别

java - 我的 JPA/Hibernate 自定义类型有什么问题?

java - 通用二分搜索 - JAVA -

java.security.cert.CertPathValidatorException : Trust anchor for certification path not found. Android 2.3

windows - 调用 FileRead 后的奇怪计数值

python - 我可以将 SIGINT 发送到 Windows 上的 Python 子进程吗?

windows - 用于 Windows 的 PDF 文件

Python:无法轻松安装 (Windows 7 x64)