Groovy/Jenkins中如何移除GrabResolver的标准仓库?
移除Groovy/Jenkins中Grab的默认仓库(如MavenCentral)
我完全理解内网环境下Grab尝试访问公共仓库超时的痛苦——Groovy的GrabResolver确实没有直接提供移除默认仓库的方法,但咱们有几个实用的办法来解决这个问题:
方法1:全局禁用默认仓库(最推荐)
通过设置JVM系统属性,直接让Groovy放弃加载MavenCentral这类默认仓库:
-Dgroovy.grab.defaultRepositories=false
- 要是在Jenkins里,你可以去全局配置的「JVM参数」里加上这个属性,所有Groovy脚本都会生效;
- 单独跑Groovy脚本的话,启动命令里带上这个参数就行。
设置之后,Grab只会用你通过@GrabResolver添加的内网仓库,再也不会去碰公共仓库了。
方法2:脚本内临时禁用
如果没法改全局配置,也能在脚本开头临时设置这个系统属性,一定要放在@Grab注解之前:
// 先关掉默认仓库 System.setProperty('groovy.grab.defaultRepositories', 'false') // 再配置内网仓库和依赖 @GrabResolver(name='internal-repo', root='http://your-company-internal-repo/') @Grab('com.yourcompany:your-dependency:1.0.0') import com.yourcompany.YourClass // 接下来写你的业务代码...
方法3:自定义Ivy配置(进阶场景)
如果需要更细粒度的仓库管理,可以写个自定义的Ivy配置文件,只包含你的内网仓库。然后用@GrabConfig指定这个文件:
@GrabConfig(settings='file:./ivy-settings.xml') @GrabResolver(name='internal-repo', root='http://your-company-internal-repo/') @Grab('com.yourcompany:your-dependency:1.0.0')
这个配置文件里要确保只引用内网仓库,把公共仓库的配置删掉。不过这种方法相对繁琐,一般前两种就够用了。
总结一下:优先用方法1或2,能快速解决超时问题,让Grab只专注于你的内网仓库。
内容的提问来源于stack exchange,提问作者JF Meier




