Jenkins 2.x Maven配置报错(已解决)

博客主要描述了在Jenkins中配置Maven时出现提示‘XXX is not a directory on the Jenkins master (but perhaps it exists on some agents)’的问题,解决方式是将maven的安装目录及仓库目录挂载到容器中,在jenkins配置页面配置,且MAVEN_HOME为容器路径非宿主机路径。

1、问题描述

在Jenkins中配置Maven时提示:XXX is not a directory on the Jenkins master (but perhaps it exists on some agents)
在这里插入图片描述

2、解决方式

需要将maven的安装目录以及仓库目录挂载到容器中,然后在jenkins中配置页面中配置。主要MAVEN_HOME为容器中的路径非宿主机的路径。以以下命令个为例:MAVEN_HOME路径为:/usr/local/maven

docker run -d --name jenkins --restart always \
--user root -p 8080:8080 -p 50000:50000 \
-v /data2/devOps/jenkins/data:/var/jenkins_home \
-v /usr/local/apache-maven-3.6.3:/usr/local/maven \
-v /var/run/docker.sock:/var/run/docker.sock \
-v $(which docker):/usr/bin/docker \
jenkins/jenkins


你遇到的这个错误是典型的 **Java 版本不兼容问题**,我们来详细分析并解决。 --- ## ❌ 错误信息解析 ```bash Exception in thread "main" java.lang.UnsupportedClassVersionError: hudson/remoting/Launcher has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0 ``` ### 🔍 关键点解读: - `class file version 55.0` → 对应 **Java 11** - `only recognizes up to 52.0` → 当前运行环境是 **Java 8(JDK 1.8)** - `hudson.remoting.Launcher` 是 Jenkins 的远程代理启动类,从较新版本开始使用 Java 11 编译 > ✅ 结论: > **你正在用 Java 8 运行 JenkinsMaven Agent,但 Jenkins 插件中的类是用 Java 11 编译的,导致无法加载。** --- ## 📌 根本原因 | 组件 | 版本要求 | |------|----------| | Jenkins2.358+ | 需要 **Java 11 或更高** | | Maven Plugin(新版) | 使用了 Java 11 编译的 remoting 包 | 你的环境: - 使用的是:`/data/software/jdk1.8.0_291/bin/java`(Java 8) - 但 Jenkins WAR 和插件中包含 Java 11 编译的字节码(如 `remoting-3261.v9c670a_4748a_9.jar`) → 所以 JVM 抛出 `UnsupportedClassVersionError` --- ## ✅ 解决方案 ### ✅ 方案一:【推荐】升级 Jenkins 启动所用的 JDK 到 Java 11 或以上 #### 步骤 1:安装 Java 11(或 Java 17) 例如使用 OpenJDK: ```bash # Ubuntu/Debian sudo apt update sudo apt install openjdk-11-jdk # CentOS/RHEL sudo yum install java-11-openjdk-devel # macOS(使用 Homebrew) brew install openjdk@11 ``` 或者手动下载 Oracle/OpenJDK 并解压。 #### 步骤 2:修改 Jenkins 启动时的 Java 路径 根据你的系统方式不同,修改如下配置文件之一: ##### 情况 A:使用 systemd 管理 Jenkins(常见于 Linux) 编辑服务文件: ```bash sudo systemctl edit jenkins ``` 或直接修改: ```bash sudo vim /etc/default/jenkins # Debian/Ubuntu # 或 sudo vim /etc/sysconfig/jenkins # CentOS/RHEL ``` 找到 `JAVA` 或 `JENKINS_JAVA_BIN` 变量,改为 Java 11 路径: ```bash JAVA="/usr/lib/jvm/java-11-openjdk/bin/java" ``` > 示例路径可能为: > - `/usr/lib/jvm/java-11-openjdk-amd64/bin/java`(Ubuntu) > - `/Library/Java/JavaVirtualMachines/openjdk-11.jdk/Contents/Home/bin/java`(macOS) ##### 情况 B:使用 Tomcat 部署 Jenkins WAR 修改 `setenv.sh` 或 `catalina.sh` 中的 `JAVA_HOME`: ```bash export JAVA_HOME=/path/to/jdk-11 export PATH=$JAVA_HOME/bin:$PATH ``` #### 步骤 3:重启 Jenkins ```bash sudo systemctl restart jenkins ``` #### 验证是否生效 进入 Jenkins 页面: ``` 管理 Jenkins → 系统信息 ``` 查找 `java.version`,应该显示类似: ``` 11.0.2 or 11.0.12 ``` 此时再执行 Maven 构建就不会报错。 --- ### ✅ 方案二:降级 Jenkins 和插件(不推荐,仅临时应急) 如果你暂时不能升级 JDK,可以尝试: 1. 回退到 **Jenkins LTS 版本 ≤ 2.346.3**(最后一个支持 Java 8 的版本) 2. 手动降级 `maven-plugin` 和 `remoting` 插件 但这会失去安全更新和功能支持,**强烈不推荐长期使用**。 --- ### ✅ 方案三:检查 Maven 是否也需匹配 Java 版本 确保你在 “全局工具配置” 中配置Maven 不强制依赖高版本 Java。 路径: ``` 管理 Jenkins → 全局工具配置Maven installations ``` - 如果你使用的 Maven 是 3.8.6+,它本身也需要 Java 8+,但最好与 Jenkins 一致。 - 推荐使用 OpenJDK 11 搭配 Maven 3.8.x + Jenkins 2.358+ --- ## 🧪 补充验证命令 在服务器上运行以下命令确认 Java 版本: ```bash # 查看当前默认 Java java -version # 明确调用某个 JDK /data/software/jdk1.8.0_291/bin/java -version # 应该输出:1.8.0_291 /usr/lib/jvm/java-11-openjdk/bin/java -version # 应该输出:11.x.x ``` --- ## 🛠️ 修复后示例正确的启动命令(由 Jenkins 自动生成) ```bash /usr/lib/jvm/java-11-openjdk/bin/java \ -cp /var/lib/jenkins/plugins/maven-plugin/WEB-INF/lib/maven35-agent-1.14.jar:\ /opt/maven/boot/plexus-classworlds-2.6.0.jar:/opt/maven/conf/logging \ jenkins.maven3.agent.Maven35Main \ /opt/maven \ /var/cache/jenkins/war/WEB-INF/lib/remoting-3261.v9c670a_4748a_9.jar \ /var/lib/jenkins/plugins/maven-plugin/WEB-INF/lib/maven35-interceptor-1.14.jar \ /var/lib/jenkins/plugins/maven-plugin/WEB-INF/lib/maven3-interceptor-commons-1.14.jar \ 42865 ``` ✅ 这样就不会出现版本冲突。 --- ## 🚫 常见误区提醒 | 误区 | 正确认知 | |------|---------| | “JDK 8 最稳定,不需要升级” | Jenkins 官方已放弃对 Java 8 的支持 | | “只要代码能跑就行” | 新版插件、安全补丁都需要 Java 11+ | | “换个旧版 Maven 插件就行” | 插件之间有依赖关系,容易引发更多问题 | ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值