我发现有时应用程序要求java_home
指向 JDK 并且不能与 JRE 一起使用。
为什么会这样?这是正确的吗?
我发现有时应用程序要求java_home
指向 JDK 并且不能与 JRE 一起使用。
为什么会这样?这是正确的吗?
短版:一些应用程序使用仅包含在 JDK 中的库/代码。
更长的版本: 通常每个 Java 程序都应该能够仅使用 JRE 运行。大多数应用程序实际上都与 JRE 一起工作。
现在 JDK 附带了一些额外的库和工具,这些库和工具通常只在开发应用程序时需要(而不是在您只需要运行它们时)。
但有时,应用程序会决定使用一些在运行时随 JDK 提供的代码。这是非常罕见的并且通常不是一个好主意(除非该应用程序本身是关于开发 Java 应用程序的)。
旧版本 Apache Tomcat 的一个很好的例子:它使用与 JDK 捆绑在一起的 Java 编译器将 JSP 代码编译成字节码。为此,它使用tools.jar
了包含在 JDK 中但不随 JRE 提供的内容。
较新的 Tomcat 为此切换到单独的编译器(我认为它基于 Eclipse 编译器)并且不再需要 JDK:它们仅使用 JRE 就可以正常运行。
@Rekin 提到了另一个很好的例子:Maven 使用 JDK,因为它实际上编译 Java 代码。
我从事的一个应用程序是使用 JDK 编译自动生成的 java 并在此之后为用户加载它(面向 db 的编译器/运行器)。
@Joachim 有更完整的答案。