为什么有些Java程序需要JDK,有些程序需要JRE?

为什么有些Java程序需要JDK,有些程序需要JRE?,java,Java,可能重复: 我发现有时应用程序要求java\u home指向JDK,而不支持JRE 为什么会这样?是否正确?简短版本:某些应用程序使用仅包含在JDK中的库/代码 更长的版本:通常每个Java程序都应该能够仅使用JRE运行。而且大多数应用程序实际上都使用JRE 现在,JDK附带了一些附加的库和工具,这些库和工具通常只在开发应用程序时需要(而不是在只需要运行它们时) 但有时应用程序决定使用JDK运行时附带的一些代码。这非常罕见,而且通常不是一个好主意(除非该应用程序本身就是关于开发Java应用程序

可能重复:

我发现有时应用程序要求
java\u home
指向JDK,而不支持JRE


为什么会这样?是否正确?

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

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

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

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

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

较新的Tomcat为此改用了一个单独的编译器(我认为它基于Eclipse编译器),不再需要JDK:它们只需要JRE就可以正常运行


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

我开发的一个应用程序是使用JDK编译自动生成的Java,然后再加载给用户(面向db的编译器/运行程序)


@约阿希姆有一个更完整的答案。

当你提问时,会列出一些重复的答案。检查一下。我强烈反对列出的重复问题。这是一个比“JRE和JDK之间有什么区别?”更具体的问题。@JoachimSauer:同意。一些工具(Maven)假设javac(在tools.jar中)位于java_home下,而其他工具则没有。区分它们很重要。这个问题是正确的。要求JDK只对java编译有意义,所以像IDEs、JEdit之类的应用程序仍然不够。ApacheTomcat的旧版本就是一个很好的例子:它使用与JDK捆绑的Java编译器将JSP代码编译成字节码。为此,它使用了JDK中包含的
tools.jar
,但没有随JRE一起提供。“使用JSE 6+的编译也需要
tools.jar
。没错,这是Tomcat所做的那种工作的标准化API。