如何快速查看Debian系统Java版本以避免兼容性问题?
- 内容介绍
- 文章标签
- 相关推荐
者主要痛点的观点是,Java 版本不对。项目直接跑不起来
在 Debian 上开发时最让人头疼的就是“在我电脑上能跑”。项目 pom.xml 或 build.gradle 明明要求 Java 11。结果程序默认是 Java 17,编译就报 Unsupported class file version;反过来生产环境是 Java 8,打包好的 jar 启动就出现 NoSuchMethodError 或 ClassNotFoundException。老实说,多个 OpenJDK 并存时不知道实际生效的是哪个 javac 和 java。导致编译与运行版本不一致,调试耗时又无从下手。为避免这种兼容性问题,第一件事就是先快速确认当前程序的 Java 版本。
说到方法一,一键确认当前默认 Java 运行版本
pain point:
- 本地建立成功。一部署到服务器就崩溃,往往是因为默认 java 与期望版本不符。
java -version
从/方法二来看,检查 Java 编译器 javac 的实际版本/
/- /编译通过但运行时报错。多半是 javac 与 java 版本不一致。
javac -version
p/p安装完成后
运行/javac/ -version 命令以检查新安装的 Java 编译器的版本号,确保编译器与运行时保持一致,避免“同步切换编译器”导致的隐形 bug。
为避免运行与编译/版本号不一致,同时切换 javac。可交互选择:
sudo update-alternatives --config javac
sudo update-alternatives --config java
p/p该命令会列出所有可用的 Java 版本及其安装方法。你可以根据需要选择默认的Java/版本号,避免将不同版本的Java 安装在程序方法 PATH 相同的目录下减少冲突的可能性。
/方法三这方面。列出程序中所有已安装的 OpenJDK 包/
/
- /不知道机器里装了几个 JDK,卸载旧版时怕删错依赖。
dpkg -l | grep openjdk
//这将显示所有与 OpenJDK 相关的已安装包的信息。便于梳理并清理冗余版本,说起来,//在 Debian 程序中。你可以打开“软件包管理器”来查看已安装的Java 包。通常,这个软件包管理器叫“软件与更新”。在其中搜索 “Java”。即可看到所有与Java 相关联的软件包,包括 JDK 和 JRE。//在软件包管理器中搜索“Java”。接下来你可以看到所有与Java 相关联的软件包,也是排查来源的好办法。
//在 Debian 程序中,可以通过命令行来查堪/b/view/Java 的/b/version 信息。下面为大家详细说几种常用的方法。//在我看来,Debian 程序通常使用 update-alternatives 来管理多个/b/Java/version。你可以使用以下命令来查询所有已安装的/b/Java/version 及方法:
//sudo update-alternatives --config java
//sudo update-alternatives --list java
//update-alternatives --display java
//update-alternatives --list javac
//update-alternatives --list jar
//update-alternatives --list javadoc
//update-alternatives --list jps
//update-alternatives --list keytool
//update-alternatives --list pack200
//update-alternatives --list rmic
//
//dpkg-query —show —showformat='${Package} ${Version}
' | grep openjdk
//
//ls /usr/lib/jvm/
//
java —XshowSettings:properties —verbose:class —cp . yourApp.java
//
# echo $JA_HOME #
# export JAHOME=/usr/lib/jvm/java-11-openjdk-amd64 export PATH=$JAHOME/bin:$PATH # export JAHOME=/usr/lib/jvm/java-17-openjdk-amd64 export PATH=$JAHOME/bin:$PATH // which java which javac // whereis java whereis javac // readlink –f $ readlink –f $ // apt list –installed | grep openjdk apt list –installed | grep default-jdk apt-cache policy default-jre default-jdk cat /etc/alternative/configs/java.conf cat /etc/alternative/configs/javac.conf
aptsource.list.d/openjdk
apt-cache search ^openjdk-+
dpkg-query –W –showformat='${Package} ${Version} ' openjdk-+
ls /usr/lib/jvm/
rmi registry hostname port
jar tf yourapp.jar
jcmd
jinfo
jps
jstat
jstack
jmap
jshell
jshell tool
jshell script.jsh
/usr/bin/java –XshowSettings : properties
/usr/bin/javadoc –J-Xmx512m …话说回来,
--add-modules ALL-SYSTEM
--add-opens
--patch-module
--module-path
--class-path
--module-source-path
--upgrade-module-path
--limit-modules
--add-reads
--illegal-access=permit/disabled/warn/permit…
/etc/environment 全局设置
/etc/environment 全局设置 // echo ‘export JAHOME=/usr/lib/jvm/java-11-openjdk-amd64’>> ~/.bashrc echo ‘export PATH=$JAHOME/bin:$PATH’>> ~/.bashrc
source ~/.bashrc
source ~/.bash_profile
/etc/profile.d/jdk.sh
//
// //
者主要痛点的观点是,Java 版本不对。项目直接跑不起来
在 Debian 上开发时最让人头疼的就是“在我电脑上能跑”。项目 pom.xml 或 build.gradle 明明要求 Java 11。结果程序默认是 Java 17,编译就报 Unsupported class file version;反过来生产环境是 Java 8,打包好的 jar 启动就出现 NoSuchMethodError 或 ClassNotFoundException。老实说,多个 OpenJDK 并存时不知道实际生效的是哪个 javac 和 java。导致编译与运行版本不一致,调试耗时又无从下手。为避免这种兼容性问题,第一件事就是先快速确认当前程序的 Java 版本。
说到方法一,一键确认当前默认 Java 运行版本
pain point:
- 本地建立成功。一部署到服务器就崩溃,往往是因为默认 java 与期望版本不符。
java -version
从/方法二来看,检查 Java 编译器 javac 的实际版本/
/- /编译通过但运行时报错。多半是 javac 与 java 版本不一致。
javac -version
p/p安装完成后
运行/javac/ -version 命令以检查新安装的 Java 编译器的版本号,确保编译器与运行时保持一致,避免“同步切换编译器”导致的隐形 bug。
为避免运行与编译/版本号不一致,同时切换 javac。可交互选择:
sudo update-alternatives --config javac
sudo update-alternatives --config java
p/p该命令会列出所有可用的 Java 版本及其安装方法。你可以根据需要选择默认的Java/版本号,避免将不同版本的Java 安装在程序方法 PATH 相同的目录下减少冲突的可能性。
/方法三这方面。列出程序中所有已安装的 OpenJDK 包/
/
- /不知道机器里装了几个 JDK,卸载旧版时怕删错依赖。
dpkg -l | grep openjdk
//这将显示所有与 OpenJDK 相关的已安装包的信息。便于梳理并清理冗余版本,说起来,//在 Debian 程序中。你可以打开“软件包管理器”来查看已安装的Java 包。通常,这个软件包管理器叫“软件与更新”。在其中搜索 “Java”。即可看到所有与Java 相关联的软件包,包括 JDK 和 JRE。//在软件包管理器中搜索“Java”。接下来你可以看到所有与Java 相关联的软件包,也是排查来源的好办法。
//在 Debian 程序中,可以通过命令行来查堪/b/view/Java 的/b/version 信息。下面为大家详细说几种常用的方法。//在我看来,Debian 程序通常使用 update-alternatives 来管理多个/b/Java/version。你可以使用以下命令来查询所有已安装的/b/Java/version 及方法:
//sudo update-alternatives --config java
//sudo update-alternatives --list java
//update-alternatives --display java
//update-alternatives --list javac
//update-alternatives --list jar
//update-alternatives --list javadoc
//update-alternatives --list jps
//update-alternatives --list keytool
//update-alternatives --list pack200
//update-alternatives --list rmic
//
//dpkg-query —show —showformat='${Package} ${Version}
' | grep openjdk
//
//ls /usr/lib/jvm/
//
java —XshowSettings:properties —verbose:class —cp . yourApp.java
//
# echo $JA_HOME #
# export JAHOME=/usr/lib/jvm/java-11-openjdk-amd64 export PATH=$JAHOME/bin:$PATH # export JAHOME=/usr/lib/jvm/java-17-openjdk-amd64 export PATH=$JAHOME/bin:$PATH // which java which javac // whereis java whereis javac // readlink –f $ readlink –f $ // apt list –installed | grep openjdk apt list –installed | grep default-jdk apt-cache policy default-jre default-jdk cat /etc/alternative/configs/java.conf cat /etc/alternative/configs/javac.conf
aptsource.list.d/openjdk
apt-cache search ^openjdk-+
dpkg-query –W –showformat='${Package} ${Version} ' openjdk-+
ls /usr/lib/jvm/
rmi registry hostname port
jar tf yourapp.jar
jcmd
jinfo
jps
jstat
jstack
jmap
jshell
jshell tool
jshell script.jsh
/usr/bin/java –XshowSettings : properties
/usr/bin/javadoc –J-Xmx512m …话说回来,
--add-modules ALL-SYSTEM
--add-opens
--patch-module
--module-path
--class-path
--module-source-path
--upgrade-module-path
--limit-modules
--add-reads
--illegal-access=permit/disabled/warn/permit…
/etc/environment 全局设置
/etc/environment 全局设置 // echo ‘export JAHOME=/usr/lib/jvm/java-11-openjdk-amd64’>> ~/.bashrc echo ‘export PATH=$JAHOME/bin:$PATH’>> ~/.bashrc
source ~/.bashrc
source ~/.bash_profile
/etc/profile.d/jdk.sh
//
// //

