Artifactory仓库制品路径错误,如何调整请求拉取传递依赖?
临时解决方案(按落地效率从高到低排序)
所有方案都不需要等Artifactory管理员修复配置,最快10分钟内可以恢复正常构建。
方案1:本地缓存手动注入(个人本地开发最快)
你已经知道制品在内部仓库的实际存储路径,直接通过浏览器/接口请求把对应版本的
.pom和.jar文件下载到本地,手动放入本地构建工具的缓存对应路径即可,构建时会优先命中本地缓存,不会再发起远程仓库请求。- 若使用Maven:默认本地缓存路径为
~/.m2/repository/,手动创建com/group/name/artifact-name/1.0.0/层级目录,把下载好的1.0.0.pom、artifact-name-1.0.0.jar放进去即可。也可以直接执行安装命令完成注入:mvn install:install-file -Dfile=./artifact-name-1.0.0.jar -DpomFile=./1.0.0.pom -DgroupId=com.group.name -DartifactId=artifact-name -Dversion=1.0.0 -Dpackaging=jar - 若使用Gradle:兼容Maven本地缓存,按上述Maven的路径放文件即可,不需要额外执行命令。
- 若使用Maven:默认本地缓存路径为
方案2:项目内置依赖替换(团队共用无感知)
如果需要团队所有成员都能正常构建,不需要每个人手动操作本地缓存,可以直接在项目构建配置中做传递依赖替换,绕开错误的仓库路径:
- 从内部仓库错误路径下载对应版本的jar、pom文件,放入项目代码库内的
libs/目录一起提交 - 在构建配置中添加替换规则,强制将该传递依赖指向项目内的本地包
- Gradle配置示例:
configurations.all { resolutionStrategy.dependencySubstitution { substitute module('com.group.name:artifact-name:1.0.0') using files('libs/artifact-name-1.0.0.jar') } } - Maven配置示例:先在当前pom中排除所有上游依赖引入的该传递依赖,再直接声明一个依赖指向项目内的包,配合
maven-install-plugin在项目初始化时自动完成本地缓存注入即可。
该方案不需要修改上游依赖,也不要求团队成员改本地配置,拉取代码后即可正常构建。
- Gradle配置示例:
- 从内部仓库错误路径下载对应版本的jar、pom文件,放入项目代码库内的
方案3:本地反向代理做路径重写(不想改项目配置可选)
如果不想修改项目任何构建配置,可以在本地启动一个轻量Nginx服务做反向代理,把构建工具请求的标准Maven路径自动重写为内部仓库的实际存储路径:
- 本地启动Nginx,添加如下配置:
server { listen 8888; location /reponame/com/group/name/artifact-name/ { rewrite ^/reponame/com/group/name/artifact-name/(.*)$ /reponame/com.group.name/artifact-name/$1 break; proxy_pass http://公司内部Artifactory服务地址; } # 其他路径正常转发到内部仓库 location / { proxy_pass http://公司内部Artifactory服务地址; } } - 把本地Maven/Gradle的仓库地址修改为
http://localhost:8888/reponame,后续所有构建请求会先到本地Nginx,路径匹配错误的制品会自动转发到正确的存储地址,其他依赖拉取不受影响。
- 本地启动Nginx,添加如下配置:
注意:以上均为临时应急方案,等Artifactory管理员修复仓库配置后,记得删除临时添加的本地包、依赖替换规则、本地代理配置,回归正常的依赖拉取流程,避免出现版本不一致、依赖无法更新的问题。
内容的提问来源于stack exchange,提问作者Jim Gough
相关产品推荐
相关产品推荐

