为什么一些Java程序要求安装JDK,而另一些则只需要JRE?

3
我发现有时候应用程序要求将java_home指向JDK,而不是JRE,否则无法工作。
为什么会这样?这是正确的吗?

1
当你提出问题时,会列出一些重复的。请检查它们。 - Denys Séguret
4
我强烈反对列出重复问题。这个问题比“JRE和JDK之间的区别是什么?”更具体。 - Joachim Sauer
@JoachimSauer:同意。有些工具(如Maven)假定在java_home下是javac(在tools.jar中),而其他工具则没有。区分它们很重要。问题是合法的。 - Rekin
要求 JDK 只有在进行 Java 编译时才有意义,因此适用于诸如 IDE、JEdit 等应用程序。 - Joop Eggen
@dystroy:还不够。 - Rekin
@dystroy:我尝试了,但没有找到有效的重复项。如果你找到了,请随意纠正我(我会投票支持的)。 - Joachim Sauer
2个回答

6

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

详细版:通常情况下,每个Java程序都应该能够仅使用JRE运行。大多数应用程序实际上也可以使用JRE工作。

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

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

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

较新的Tomcat已经切换到了单独的编译器(我认为它基于Eclipse编译器),因此不再需要JDK:只使用JRE就可以正常运行。

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


1
一个很好的例子是旧版本的Apache Tomcat:它使用与JDK捆绑的Java编译器将JSP代码编译成字节码。为此,它使用了tools.jar,该文件包含在JDK中,但不随JRE一起提供。使用JSE 6+的JavaCompiler进行编译也需要tools.jar - Andrew Thompson
1
没错,那就是Tomcat所做的那种事情的标准化API。 - Joachim Sauer

2

我曾经参与过一个项目,使用JDK编译自动生成的Java代码,并在此之后为用户加载(一个面向数据库的编译器/运行器)。

@Joachim提供了更完整的答案。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接