我发现有时候应用程序要求将
为什么会这样?这是正确的吗?
java_home
指向JDK,而不是JRE,否则无法工作。为什么会这样?这是正确的吗?
java_home
指向JDK,而不是JRE,否则无法工作。简短版:一些应用程序使用仅包含在JDK中的库/代码。
详细版:通常情况下,每个Java程序都应该能够仅使用JRE运行。大多数应用程序实际上也可以使用JRE工作。
现在,JDK附带了一些额外的库和工具,这些工具通常只在开发应用程序时才需要使用(而不是在运行应用程序时需要使用)。
但偶尔会有应用程序决定在运行时使用JDK提供的一些代码。这种情况非常罕见,通常不是一个好主意(除非该应用程序本身就是关于开发Java应用程序的)。
一个很好的例子是旧版本的Apache Tomcat:它使用与JDK捆绑的Java编译器将JSP代码编译成字节码。为此,它使用了JDK中包含但不随JRE一起交付的tools.jar
。
较新的Tomcat已经切换到了单独的编译器(我认为它基于Eclipse编译器),因此不再需要JDK:只使用JRE就可以正常运行。
@Rekin提到了另一个很好的例子:Maven使用JDK,因为它实际上编译Java代码。
tools.jar
,该文件包含在JDK中,但不随JRE一起提供。使用JSE 6+的JavaCompiler
进行编译也需要tools.jar
。 - Andrew Thompson我曾经参与过一个项目,使用JDK编译自动生成的Java代码,并在此之后为用户加载(一个面向数据库的编译器/运行器)。
@Joachim提供了更完整的答案。