发布于2026-07-20 阅读(0)
扫一扫,手机访问
在CentOS上搞Ja va开发,最头疼的莫过于编译时突然蹦出版本冲突——明明昨天还好好的,今天一执行ja vac就报错,查了半天发现系统里同时躺着Ja va 8和Ja va 11。别急,这事其实有套路可循,下面一步步拆解。
先摸清家底。打开终端,敲两行命令看看当前默认的Ja va运行时和编译器版本:
ja va -version
ja vac -version

如果输出里连着出现两个不同版本的影子(比如既有1.8.0又有11.0),那冲突的根源就找到了。接下来就是管理这些版本,让系统知道该用哪个。
CentOS自带的update-alternatives是个好帮手,它像给系统装了一个“默认版本切换器”。先注册每个Ja va版本到alternatives系统里:
sudo alternatives --install /usr/bin/ja va ja va /usr/lib/jvm/ja va-1.8.0-openjdk/bin/ja va 1
sudo alternatives --install /usr/bin/ja vac ja vac /usr/lib/jvm/ja va-1.8.0-openjdk/bin/ja vac 1
sudo alternatives --install /usr/bin/ja va ja va /usr/lib/jvm/ja va-11-openjdk/bin/ja va 2
sudo alternatives --install /usr/bin/ja vac ja vac /usr/lib/jvm/ja va-11-openjdk/bin/ja vac 2
注意,/usr/lib/jvm/后面的路径要根据你实际JDK安装位置来调整。注册完成后,切换默认版本只需一条命令:
sudo alternatives --config ja va
sudo alternatives --config ja vac
系统会列出所有注册的版本,输入对应编号即可。这样一来,编译和运行时用的就是你想用的那个版本了。
环境变量搞错也是冲突的重灾区。很多开发者只切换了alternatives,却忘了改JA VA_HOME,结果编译时用的还是旧路径。需要编辑/etc/profile(全局)或~/.bashrc(用户级),加入如下内容(以Ja va 11为例):
export JA VA_HOME=/usr/lib/jvm/ja va-11-openjdk
export PATH=$JA VA_HOME/bin:$PATH
export CLASSPATH=.:$JA VA_HOME/lib/dt.jar:$JA VA_HOME/lib/tools.jar
路径同样替换成你实际的JDK目录。改完后执行source /etc/profile或source ~/.bashrc让变量立即生效。这一步做好,很多莫名其妙的编译错误就消失了。
如果某个版本已经彻底用不上了,干脆清理掉,免得后患。用yum包管理器精准卸载:
sudo yum remove ja va--openjdk*
比如卸载Ja va 8:sudo yum remove ja va-1.8.0-openjdk*。注意通配符*会匹配所有相关包,包括jdk和jre,一次搞定。
有时候冲突不是来自系统Ja va版本,而是项目自身的依赖——比如Ma ven或Gradle项目里引入了多个版本的同一个库,编译时就会提示冲突。这时候需要借助构建工具本身的依赖管理能力。
Ma ven项目:先跑mvn dependency:tree看看依赖树,找到冲突的依赖(比如log4j同时出现了1.x和2.x)。然后在pom.xml里用排除掉不需要的传递依赖:
com.example
example-lib
1.0.0
org.apache.logging.log4j
log4j-core
或者更干脆,用强制统一某个依赖的版本。
Gradle项目:类似地,gradle dependencies查看依赖树,然后在build.gradle里用exclude:
implementation('com.example:example-lib:1.0.0') {
exclude group: 'org.apache.logging.log4j', module: 'log4j-core'
}
也可以使用resolutionStrategy强制指定版本,让所有冲突依赖都听你的指挥。
如果你经常需要在不同Ja va版本之间切换,比如一边维护老项目一边开发新项目,手动配置就有点烦了。这时候可以考虑第三方工具。
SDKMAN:安装简单,一行命令搞定:curl -s "https://get.sdkman.io" | bash。之后通过sdk install ja va 11.0.1-open安装指定版本,用sdk use ja va 11.0.1-open临时切换,sdk default ja va 11.0.1-open设置全局默认。SDKMAN还支持Ma ven、Gradle等工具的版本管理,挺方便。
JEnv:安装后,jenv add /usr/lib/jvm/ja va-11-openjdk添加版本,然后jenv global 11设置全局,或jenv local 11只针对当前项目目录生效。适合喜欢轻量级方案的朋友。
两者选一个顺手就好,关键是别再让版本冲突打乱你的工作节奏。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8