Ubuntu安装最新版Maven报错重启后版本不生效问题求解
Ubuntu系统Java17环境下Maven运行异常修复方案
问题根因
- 初始执行
mvn clean install抛出Could not initialize class com.google.inject.internal.cglib.core.$MethodWrapper错误,核心原因是Ubuntu apt源默认预装的Maven 3.6.3版本内置的cglib、guice组件不兼容Java 17,必须升级到Maven 3.8.1及以上版本才能正常适配。 - 手动安装过程中出现
uname: not found、dirname: not found以及ClassNotFoundException: org.codehaus.plexus.classworlds.launcher.Launcher报错,是因为配置过程中JAVA_HOME路径填写错误、软链接指向异常、PATH变量加载错误导致的。 - 重启终端后仍加载旧版Maven 3.6.3,是因为旧版Maven未卸载、环境变量未全局生效,系统PATH中旧版Maven路径优先级高于手动安装的新版路径。
修复步骤
1. 清理历史错误配置
先清除之前操作生成的无效配置和旧版本程序,避免路径冲突:
# 删除之前创建的无效Maven软链接 sudo rm -rf /opt/maven # 删除之前编写的错误环境变量脚本 sudo rm -f /etc/profile.d/maven.sh # 卸载系统apt预装的旧版Maven sudo apt remove -y maven # 校验旧版命令是否清理完成,执行后无输出代表清理成功 which mvn
2. 确认Java环境真实路径
不要手动猜测JAVA_HOME路径,先通过系统命令确认Java 17的实际安装位置:
# 查看已安装的Java版本与路径 java --version sudo update-alternatives --list java
正常OpenJDK 17的安装路径为/usr/lib/jvm/java-17-openjdk-amd64,之前配置中填写的/usr/lib/jvm/java-1.17.0-openjdk-amd64为错误路径,是导致配置失效的核心原因之一。
3. 重新安装Maven 3.8.5
# 创建临时下载目录 mkdir -p ~/tmp MAVEN_VERSION=3.8.5 # 下载官方二进制包 wget -P ~/tmp/ https://dlcdn.apache.org/maven/maven-3/${MAVEN_VERSION}/binaries/apache-maven-${MAVEN_VERSION}-bin.tar.gz # 解压到/opt目录 sudo tar xf ~/tmp/apache-maven-*-bin.tar.gz -C /opt # 清理安装压缩包 rm -f ~/tmp/apache-maven-*-bin.tar.gz # 创建软链接,后续升级Maven仅需修改软链接指向即可 sudo ln -s /opt/apache-maven-${MAVEN_VERSION} /opt/maven
解压完成后执行ls /opt/maven/boot,确认目录下存在plexus-classworlds-*.jar文件,即可确认安装包解压完整,不会再出现找不到Launcher类的错误。
4. 配置全局环境变量
# 写入环境变量配置 sudo tee /etc/profile.d/maven.sh << 'EOF' export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64 export M2_HOME=/opt/maven export MAVEN_HOME=/opt/maven export PATH=$M2_HOME/bin:$PATH EOF # 给配置脚本添加执行权限 sudo chmod +x /etc/profile.d/maven.sh
5. 加载配置并验证
# 加载全局配置 source /etc/profile.d/maven.sh # 校验mvn命令路径,正常应输出/opt/maven/bin/mvn which mvn # 校验Maven版本 mvn -v
正常输出版本信息如下即为安装成功:
Apache Maven 3.8.5 (3599d3414f066afef419d4d74ffd558bbffe9f6b) Maven home: /opt/maven Java version: 17.0.3, vendor: Private Build, runtime: /usr/lib/jvm/java-17-openjdk-amd64 Default locale: en_US, platform encoding: UTF-8 OS name: "linux", version: "5.13.0-44-generic", arch: "amd64", family: "unix"
如果重启图形界面终端后仍加载旧版本,就把上述maven.sh中的三行export配置追加到~/.bashrc文件末尾,执行source ~/.bashrc即可永久生效——部分Ubuntu桌面版默认不会给图形终端自动加载/etc/profile.d/下的脚本。
内容的提问来源于stack exchange,提问作者skyho
相关产品推荐
相关产品推荐

