最近在学习 PyFlink,需要安装Java11环境,但是本机已经安装了java1.8,在升级的过程中遇到了一些问题,在这里记录一下。
windows下安装JDK11
下载JDK11:https://www.oracle.com/java/technologies/downloads/#java11-windows
选择jdk-11.0.22_windows-x64_bin.exe
安装到 C:\Program Files\Java\jdk-11
发现安装后的目录中没有 jre 目录,运行CMD(以管理员身份,否则会报错)命令:
cd C:\Program Files\Java\jdk-11
bin\jlink.exe --module-path jmods --add-modules java.desktop --output jre
JDK和JRE是Java开发和运行工具,其中JDK包含了JRE,但是JRE是可以独立安装的,一般在安装JDK的时候会安装JRE。
由于在Java1.5时,人们觉得版本更新速度很慢,都是1.x.x 的,就直接取后面的数字叫Java5,所以说其实是一种东西,只是叫法不同
JDK:Java SE Development Kit
JRE:Java(TM) SE Runtime Environment
设置环境变量,都设置在系统变量
JAVA_HOME:C:\Program Files\Java\jdk-11
CLASSPATH:.;%JAVA_HOME%\lib;
Path:%JAVA_HOME%\bin 和 %JAVA_HOME%\jre\bin
重新打开CMD窗口
> java -version
java version "1.8.0_201"
Java(TM) SE Runtime Environment (build 1.8.0_201-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.201-b09, mixed mode)
> javac -version
javac 11.0.22
> echo %JAVA_HOME%
C:\Program Files\Java\jdk-11
好了,问题出现了,java 程序依然是旧的版本,javac 程序已经是新版本了。
java程序使用的居然是 jre 这个包。我也不知道在什么时候安装的 jre 。
还是在环境变量中找到了蛛丝马迹,在Path中,排在前面的优先级最高。
找到C:\Program Files (x86)\Common Files\Oracle\Java\javapath
目录
发现 java.exe 程序最后修改时间与上面的 jre 的安装时间一致,莫非是在安装 jre 的时候创建的这个目录和环境变量?
找到 C:\Program Files\Common Files\Oracle\Java\javapath
目录
找到C:\ProgramData\Oracle\Java\javapath
目录
解决方式要么在Path中把顺序调一下,要么使用新的java.exe程序替换掉。
> java -version
java version "11.0.22" 2024-01-16 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.22+9-LTS-219)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.22+9-LTS-219, mixed mode)
> javac -version
javac 11.0.22
以 jdk11.0.22 为例,它的 bin 目录下有 java.exe, javac.exe, javaw.exe
;而它下面的 jre/bin
目录下有java.exe, javaw.exe
,他们都没有javaws.exe
,这也是各个版本的问题。
javac
它是java编译器,我们直接写的.java文件必须编译成.class文件才能运行,而javac的工作就是将我们写的.java 文件翻译成.class文件。
java
The java command starts a Java application. It does this by starting the Java Runtime Environment (JRE), loading the specified class, and calling that class’s main() method.
java.exe的工作就是通过启动jre,加载特定的class文件,并调用class的主方法的方式来启动一个java应用。
javaw
The javaw command is identical to java, except that with javaw there is no associated console window. Use javaw when you do not want a command prompt window to appear. The javaw launcher will, however, display a dialog box with error information if a launch fails.
javaw.exe基本上就是java.exe ,但是javaw没有一个相关联的控制台,比如在运行 GUI 程序的时候。
javaws
它是用来启动web分发的java的程序。