从Java 8切换到Java 11

14

我从Oracle官网下载并安装了oraclejdk11,并修改了系统环境变量中的PATH和JAVA_HOME变量(在Windows操作系统下)。

C:\Users\Aviral>javac -version

javac 11.0.1

C:\Users\Aviral>java -version

java version "1.8.0_102"

Java(TM) SE Runtime Environment(版本为1.8.0_102-b14)
Java HotSpot(TM) 64-Bit Server VM(版本为25.102-b14,混合模式)

我知道JDK11不包含JRE,但我如何在Java 11中从命令提示符运行Java程序?


在bin路径中,它显示的Java版本为11.01,但我如何使用Java 11从另一个文件夹执行程序? - Aviral Ahuja
1
当您设置JAVA_HOME和PATH时,您可以全局访问java命令(这意味着您可以在任何路径中使用它)。 - Saeed Hassanvand
4个回答

17
JDK包括JRE,您可以使用bin文件夹中的java可执行文件启动它。您可以像任何其他可执行文件一样使用此可执行文件。
当您在命令行中键入java时,它实际上是速记方式。它会搜索您的PATH,直到找到第一个匹配的java可执行文件。如果要指定不同的java可执行文件,则可以提供可执行文件的绝对路径。
C:\Users\Avril> "C:\Program Files\Java\jdk-11.0.1\bin\java" -jar path\to\file.jar

如果你已经将JAVA_HOMEPATH设置为JDK-11,为什么java -version仍然使用Java 8?你可能会想知道。

查看一下你的PATH,你很可能会发现像C:\ProgramData\Oracle\Java\javapath这样的条目是其中的第一个条目(参见此处)。当你安装Java 8时,这个条目会自动添加,并指向Java 8可执行文件(javajavawjavaws)。由于它在%JAVA_HOME%\bin之前,所以它具有优先权。然而,...\javapath不包含javac,这就是为什么javac -version使用JAVA_HOME(Java 11)的原因。


我的路径变量只包含jdk11 bin文件夹的路径。 - Aviral Ahuja
那么我会认为java不会使用Java 8。某个地方,一定有东西指向了Java 8。如果没有,那么可能你的环境还没有“刷新”。 - Slaw
感谢@Slaw。我浪费了很长时间才发现为什么即使设置了正确的bin路径,java -version也不显示Java 11。从路径变量中删除C:\ProgramData\Oracle\Java\javapath就可以了! - Akash
如何在安装了多个Java版本的情况下默认切换到Java 11。 - neo
只要你的PATH指向Java 11,那么在命令行上使用“java”应该会“默认”使用版本11。如果你的PATH中有多个条目指向不同的Java安装,则在命令行上使用“java”将始终使用第一个匹配的条目。 - Slaw

8

bin文件夹包含所有传统的JRE工具。在Java 11中,JDK和JRE工具已经合并,因此JDK 11中不再包含JRE。


2
为了在使用Java 11时从其他文件夹而不是bin文件夹中执行程序,您需要按照以下步骤设置JAVA_HOME路径(从CMD)

以管理员身份打开CMD

将JAVA_HOME设置为JDK 11的bin文件夹

setx -m JAVA_HOME "C:\Program File\Java\..."

我使用了该命令并得到了“SUCCESS: result value has been saved”的提示,但仍然得到Java 1-8作为Java版本。 - Aviral Ahuja
因为这是错误的。你不应该将它设置到bin文件夹中,而应该使用jdk文件夹。 - T3rm1
将 C:\ProgramData\Oracle\Java\javapath 移动到 Java 11 路径下方解决了问题。 - Rim

0

我从JDK 8升级到了JDK 11。在将Java 11添加到路径中[将路径指向

bin文件夹]和JAVA_HOME [仅指向jdk文件夹(不包括bin)]

成功后,

java -version仍然指向先前的Java版本(在我的情况下是Java 8)。

然后,我运行了一个命令"setx -m JAVA_HOME "C:\Program Files\Java\jdk-11.0.7"

现在java -versionjavac -version都显示Java 11。

希望这对你也有所帮助。


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