You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jenkins 2.107.1对应Jersey版本及Ubuntu下Pipeline依赖问题咨询

关于Jenkins 2.107.1的Jersey版本及Pipeline REST调用问题解答

1. Jenkins 2.107.1对应的Jersey版本

Jenkins 2.107.1内置的Jersey版本是1.19.4。这个版本属于Jersey 1.x分支,和你项目里依赖的JAX-RS 2.0.1(对应Jersey 2.x生态)是完全不同的分支,API差异极大,这正是你后续遇到问题的核心根源。

2. 解决Pipeline中UriBuilder缺失toTemplate方法的问题

你碰到的MethodNotFound异常,本质是Jenkins的类加载机制导致的优先级冲突:Jenkins启动时会优先加载自身内置的Jersey 1.x类,而你的Java库依赖的JAX-RS 2.0.1(包含带toTemplate方法的新版UriBuilder)被Jenkins的类加载器屏蔽了,代码实际调用的还是旧版UriBuilder,自然找不到对应方法。

这里给你几个实用的解决方案:

方案一:通过Grape配置类加载隔离

在你的Pipeline脚本里,使用Grape时明确指定类加载器隔离规则,让你的Java库使用独立的类加载器,避开Jenkins的内置类。示例配置如下:

@Grab(group='javax.ws.rs', module='javax.ws.rs-api', version='2.0.1')
@GrabConfig(systemClassLoader=false, initContextClassLoader=true)
import javax.ws.rs.core.UriBuilder

其中systemClassLoader=false会阻止Grape将依赖加载到系统类加载器,避免和Jenkins内置类冲突;initContextClassLoader=true确保你的代码用Grape的类加载器来加载这些依赖。

方案二:调整Jenkins启动参数修改类加载优先级

如果方案一效果不佳,你可以尝试修改Jenkins的JVM启动参数,让JAX-RS 2.0.1的类优先被加载。在Ubuntu系统中,编辑Jenkins配置文件(通常是/etc/default/jenkins),在JAVA_ARGS中添加:

JAVA_ARGS="-Dhudson.model.DirectoryBrowserSupport.CSP= -Djava.net.preferIPv4Stack=true -Xbootclasspath/p:/path/to/javax.ws.rs-api-2.0.1.jar"

记得把/path/to/替换成你实际存放jar包的路径,之后重启Jenkins服务:

sudo systemctl restart jenkins

不过这个方法要谨慎,因为Jenkins核心依赖Jersey 1.x,修改后可能影响部分插件的稳定性。

方案三:替换Jenkins内置Jersey版本(不推荐)

你可以尝试替换Jenkins安装目录下的Jersey 1.x相关jar包为兼容的Jersey 2.x版本,但这个操作风险极高——Jenkins的大量核心插件都是基于Jersey 1.x开发的,替换后很可能导致插件失效甚至Jenkins无法启动,除非你对Jenkins内部依赖逻辑非常熟悉,否则不建议尝试。

额外提醒

如果你的代码是放在Pipeline共享库(Shared Libraries)里的,也要确保共享库的依赖配置正确,同样要注意类加载隔离的问题,避免和Jenkins内置类产生冲突。


内容的提问来源于stack exchange,提问作者JF Meier

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:39:28