3

可能重复:
Java SE 6 vs. JRE 1.6 vs. JDK 1.6 - 这些是什么意思?

我发现有时应用程序要求java_home指向 JDK 并且不能与 JRE 一起使用。

为什么会这样?这是正确的吗?

4

2 回答 2

6

短版:一些应用程序使用包含在 JDK 中的库/代码。

更长的版本: 通常每个 Java 程序都应该能够仅使用 JRE 运行。大多数应用程序实际上都与 JRE 一起工作。

现在 JDK 附带了一些额外的库和工具,这些库和工具通常只在开发应用程序时需要(而不是在您只需要运行它们时)。

但有时,应用程序会决定使用一些在运行时随 JDK 提供的代码。这是非常罕见的并且通常不是一个好主意(除非该应用程序本身是关于开发 Java 应用程序的)。

旧版本 Apache Tomcat 的一个很好的例子:它使用与 JDK 捆绑在一起的 Java 编译器将 JSP 代码编译成字节码。为此,它使用tools.jar了包含在 JDK 中但不随 JRE 提供的内容。

较新的 Tomcat 为此切换到单独的编译器(我认为它基于 Eclipse 编译器)并且不再需要 JDK:它们仅使用 JRE 就可以正常运行。

@Rekin 提到了另一个很好的例子:Maven 使用 JDK,因为它实际上编译 Java 代码。

于 2012-11-26T13:33:45.523 回答
2

我从事的一个应用程序是使用 JDK 编译自动生成的 java 并在此之后为用户加载它(面向 db 的编译器/运行器)。

@Joachim 有更完整的答案。

于 2012-11-26T13:35:29.970 回答