Ubuntu下Maven无法识别已安装的默认Oracle JDK,如何修改安装行为?
解决Ubuntu安装Maven时自动安装default-jre的问题
首先提个小细节:你解压的是Oracle JDK 1.8.0_141,但在update-alternatives命令里用的路径是jdk1.8.0_05,这应该是笔误吧?先把这个路径修正过来,否则后续可能出现隐性问题,执行以下命令调整:
sudo update-alternatives --remove java /opt/jdk/jdk1.8.0_05/bin/java sudo update-alternatives --remove javac /opt/jdk/jdk1.8.0_05/bin/javac sudo update-alternatives --install /usr/bin/java java /opt/jdk/jdk1.8.0_141/bin/java 100 sudo update-alternatives --install /usr/bin/javac javac /opt/jdk/jdk1.8.0_141/bin/javac 100
回到你的核心问题:为什么apt-get装Maven时还要装default-jre?因为Ubuntu的包管理系统(dpkg/apt)是基于已注册的deb包来检查依赖的,你手动解压的Oracle JDK并没有被dpkg记录,所以apt认为系统缺少Java运行时环境,就会自动安装default-jre来满足Maven的依赖。下面提供两种可靠的解决方法:
方法一:用虚拟deb包“欺骗”apt
我们可以创建一个虚拟的deb包,让系统认为default-jre已经安装,这样apt就不会再尝试安装它:
- 先安装创建虚拟包的工具:
sudo apt-get install equivs
- 生成一个默认的控制文件:
equivs-control default-jre-stub
- 编辑这个控制文件(用
nano或你习惯的编辑器),修改成类似下面的内容(注意版本号和架构要匹配你的系统):
Package: default-jre Version: 2:1.8-58ubuntu2 # 可以用`apt-cache show default-jre`查看系统默认版本 Provides: java-runtime, java8-runtime, default-jre Depends: Architecture: amd64 # 32位系统改成i386 Description: Stub package to satisfy default-jre dependency for Oracle JDK
- 构建虚拟deb包:
equivs-build default-jre-stub
- 安装这个虚拟包:
sudo dpkg -i default-jre_*.deb
现在再执行sudo apt-get install maven,apt就不会再要求安装default-jre了。
方法二:让系统完全识别你的Oracle JDK
如果你希望系统把Oracle JDK当作官方的Java环境来对待,可以将它注册到update-java-alternatives系统中:
- 在
/usr/lib/jvm/目录下创建一个配置文件:
sudo nano /usr/lib/jvm/.java-8-oracle.jinfo
- 写入以下内容(所有路径替换成你的JDK实际路径):
name=java-8-oracle alias=java-8-oracle priority=100 section=non-free hl java /opt/jdk/jdk1.8.0_141/bin/java hl javac /opt/jdk/jdk1.8.0_141/bin/javac hl javaws /opt/jdk/jdk1.8.0_141/bin/javaws hl jexec /opt/jdk/jdk1.8.0_141/jre/lib/jexec hl jar /opt/jdk/jdk1.8.0_141/bin/jar hl jps /opt/jdk/jdk1.8.0_141/bin/jps hl jstack /opt/jdk/jdk1.8.0_141/bin/jstack hl jmap /opt/jdk/jdk1.8.0_141/bin/jmap hl jhat /opt/jdk/jdk1.8.0_141/bin/jhat hl jstat /opt/jdk/jdk1.8.0_141/bin/jstat hl javah /opt/jdk/jdk1.8.0_141/bin/javah hl javap /opt/jdk/jdk1.8.0_141/bin/javap hl jdb /opt/jdk/jdk1.8.0_141/bin/jdb hl rmic /opt/jdk/jdk1.8.0_141/bin/rmic hl keytool /opt/jdk/jdk1.8.0_141/bin/keytool hl jarsigner /opt/jdk/jdk1.8.0_141/bin/jarsigner hl native2ascii /opt/jdk/jdk1.8.0_141/bin/native2ascii hl javadoc /opt/jdk/jdk1.8.0_141/bin/javadoc
- 设置这个JDK为系统默认:
sudo update-java-alternatives --set java-8-oracle
- 验证配置是否生效:
update-java-alternatives --list
输出应该会显示java-8-oracle为默认选项。
最后,建议你把JAVA_HOME环境变量配置到系统级,确保Maven能正确找到Java:
编辑/etc/environment文件:
sudo nano /etc/environment
添加一行:
JAVA_HOME="/opt/jdk/jdk1.8.0_141"
保存后执行source /etc/environment让配置立即生效。
内容的提问来源于stack exchange,提问作者Buddhika
相关产品推荐
相关产品推荐

