【问题标题】:Why do some Java programs ask for a JDK and some for the JRE? [duplicate]为什么有些 Java 程序要求 JDK 而有些要求 JRE? [复制]
【发布时间】:2012-11-26 13:25:33
【问题描述】:

可能重复:
Java SE 6 vs. JRE 1.6 vs. JDK 1.6 - What do these mean?

我发现有时应用程序会要求 java_home 指向 JDK,但不适用于 JRE。

为什么会这样?对吗?

【问题讨论】:

  • 当您提出问题时,会列出一些重复项。检查它们。
  • 强烈不同意列出的重复问题。这是一个比“JRE 和 JDK 有什么区别?”更具体的问题。
  • @JoachimSauer:同意。一些工具(Maven)假设 java_home 下的 javac(在 tools.jar 中),而其他工具则不假设。区分它们很重要。问题有效。
  • 需要 JDK 只对 java 编译有意义,所以像 IDE、JEdit 等应用程序。
  • @dystroy:还是不够。

标签: java


【解决方案1】:

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

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

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

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

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

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

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

【讨论】:

  • “旧版本 Apache Tomcat 的一个很好的例子:它使用与 JDK 捆绑在一起的 Java 编译器将 JSP 代码编译为字节码。为此它使用了 tools.jar,它包含在JDK 但不随 JRE 一起交付。” 使用 JSE 6+ 的 JavaCompiler 进行编译也需要 tools.jar
  • 对,这就是 Tomcat 正在做的事情的标准化 API。
【解决方案2】:

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

@Joachim 有更完整的答案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 2018-02-12
    • 1970-01-01
    • 1970-01-01
    • 2014-03-19
    • 1970-01-01
    相关资源
    最近更新 更多