显示不同版本的java-version和javac-version
我在windows系统上的显示不同版本的java-version和javac-version,java,Java,我在windows系统上的C:\Program Files\java下安装了java 7和java 8 在环境的路径中,我指定了java7的路径,如下所示 %JAVA\u HOME%/bin其中JAVA\u HOME=C:\Program Files\JAVA\jdk1.7.0\u 17 但是当我键入javac-version时,它会显示javac1.7.0_17,这是有意义的 但是当我执行java-version时,它会显示 java version "1.8.0" Java(TM) SE R
C:\Program Files\java
下安装了java 7
和java 8
在环境的路径中,我指定了java7
的路径,如下所示
%JAVA\u HOME%/bin
其中JAVA\u HOME=C:\Program Files\JAVA\jdk1.7.0\u 17
但是当我键入javac-version
时,它会显示javac1.7.0_17
,这是有意义的
但是当我执行java-version
时,它会显示
java version "1.8.0"
Java(TM) SE Runtime Environment (build 1.8.0-b132)
Java HotSpot(TM) 64-Bit Server VM (build 25.0-b70, mixed mode)
知道这里有什么问题吗?
编辑安装的文件夹:
还有一件事
echo%PATH%
只有一次出现在JDK
中,那就是java7
,而JRE
中没有出现,它是从jre7
中获取的值,您当前正在使用该值进行开发,并且在编写java版本
时,它从jre8
中获取版本的值,该版本目前正由系统上已安装的应用程序使用,因为在用于开发的jre7之前提到了系统的JRE
。问题的出现很可能是因为您有JRE在路径中,在JDK之前。这通常发生在我们在路径中添加JDK而不删除以前添加的jre时。因此,当您执行java
时,它指向JRE,当您执行javac
时,它指向另一个版本/JDK(因为JRE中没有javac
)
如果path中没有任何JRE,则可以复制%JAVA\u HOME%
并首先将其粘贴到path变量中(确保其位于system32
路径之前)
这一方法有效的一个可能原因是:
JRE还将java.exe
放入c:\Windows\System32
,这就是第一个命令的解析方式。第二个命令由PATH
变量中的C:\Program Files\Java\jdk1.7.0\u 02\bin
条目解析。
如果(以及当)在命令提示符下进行开发,则必须调整路径
变量,使C:\Program Files\Java\jdk1.7.0\u 02\bin
位于C:\Windows\System32
之前
为了解决这样的环境问题,我始终相信指挥权在哪里,
要在windows下载中执行相同操作,请在路径中设置并执行命令
java.exe在哪里
javac.exe在哪里
您将很容易找到java在环境中被调用的确切路径以及关于javac的路径。好的,正如您所说,您的路径上没有JRE,我假设这将为您提供C:\Windows\System32\java.exe
更改java
运行
尝试使用“控制面板”中的“Java设置”对话框更改当前处于活动状态的Java系统版本。这将更改java的版本-返回的版本是。如果这不起作用,您可能需要重新安装要运行Java
命令的Java版本,明确指定路径,编写自己的包装器(如果您与包装器位于同一目录中,则可以工作),或者将JRE路径放在路径的C:\Windows\System32\
之前(不知道最后一个选项是否真的好)
包装器可以如下所示:
@"C:\Program Files\Java\jre7\bin\java.exe" %*
您可以将它命名为java.bat
(如果您在同一目录下,它将在该目录下工作,或者将它放在C:\Windows\System32\java.exe
之前的PATH
中,或者您可以将它命名为java7.bat
并将其放在路径上的任何位置,以便在您希望运行Java7JRE的地方
如果要在运行时更改JAVA\u HOME
,包装器也是一个不错的选择
更改javac
运行
如果您想运行另一个javac
点击Windows+Pause
并打开系统对话框来更改路径
,使其包含到JDK 8而不是JDK 7的路径。您需要重新启动命令行以显示更改。是的,为了处理不匹配的版本,确实需要o修改PATH变量,并且where
命令(至少在Windows中)非常方便地确定首先选择哪个程序。
然而,有一个转折点:
例如,运行后查看yout PATH var的内容时
echo %path% > path.txt
您应该知道,路径实际上由两部分组成:一部分是系统路径,另一部分是当前用户路径,系统路径首先得到评估,但最后打印出来。
因此,只要在系统路径的某个地方有另一个使用旧版本的地方,那么简单地在所有东西前面放置一个指向您的(比如)全新JDK的路径将是无用的
当您有诸如
C:\Program Files (x86)\Common Files\Oracle\Java\javapath;C:\ProgramData\Oracle\Java\javapath
在您的系统路径中。只需将它们移动到当前用户路径部分的尾部,使这些条目成为搜索队列中的最后一个条目。我的案例(移动jdk8->jdk9->jdk11)我有一个垃圾
由路径中的jdk8留下(在JAVA_主页:“C:\PATH\java11”之前)
所以我只是从系统变量中删除C:\ProgramData\Oracle\Java\javapath\U jdk8
//或者将其放在javapath_jdk11下方,转到windows计算机中的环境变量。
在用户变量中:确保设置
-将用户变量“JAVA\u HOME”值设置为“C:\Program Files\JAVA\jdk xxxx\bin”
其中“jdk xxx”是您的jdk版本
在系统变量中:
-添加相同的“C:\ProgramFiles\Java\jdk xxx
sudo update-alternatives --config java
Selection Path Priority Status
------------------------------------------------------------
0 /usr/lib/jvm/java-11-openjdk-amd64/bin/javac 1111 auto mode
1 /usr/lib/jvm/java-11-openjdk-amd64/bin/javac 1111 manual mode
* 2 /usr/lib/jvm/java-8-openjdk-amd64/bin/javac 1081 manual mode
sudo update-alternatives --config java
Selection Path Priority Status
------------------------------------------------------------
0 /usr/lib/jvm/java-11-openjdk-amd64/bin/java 1111 auto mode
1 /usr/lib/jvm/java-11-openjdk-amd64/bin/java 1111 manual mode
* 2 /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java 1081 manual mode