场景:
今天使用jenkins打包镜像时,发现其中一个jar包私服仓库没有,本地是有的,因此遇到如何从本地向nexus仓库推送的问题(之前没有推过现在遇到一些坑特此记录一下)
问题:
如何正确地从本地向nexus仓库推送jar包
目标:
将本地的 latform-rulesengine-client 的jar包推送到nexus上
com.gisquest.cloud
platform-rulesengine-client
1.0.7-YWDZ-SNAPSHOT
网上搜索了解决方案:
- mvn deploy:deploy-file
- -DgroupId=com.gisquest.cloud
- -DartifactId=platform-rulesengine-client
- -Dversion=1.0.7-YWDZ-SNAPSHOT
- -Dpackaging=jar
- -Dfile=C:\Users\Administrator\Desktop\tui\platform-rulesengine-client-1.0.7-YWDZ-SNAPSHOT.jar
- -Durl=http://192.168.11.70:8081/nexus/content/groups/public/
- -DrepositoryId=nexus
注解:
-DgroupId 、-DartifactId、-Dversion分别和该包的坐标依赖相对应
-Dpackaging:表示准备推到nexus上包的类型
-Dfile :表示要从本地推到nexus上包的绝对路径(重要)
-Durl: 表示私服仓库的地址(重要)
-DrepositoryId:表示私服仓库对应的唯一id
我本地pom.xml的配置如下(maven中setting.xml文件中私服的url都是一样的):
- <!-- 设定主仓库,按设定顺序进行查找。 -->
- <repositories>
- <repository>
- <id>nexus</id>
- <name>nexus</name>
- <url>http://192.168.11.70:8081/nexus/content/groups/public/</url>
- <releases>
- <enabled>true</enabled>
- </releases>
- <snapshots>
- <enabled>true</enabled>
- </snapshots>
- </repository>
- </repositories>
按理说执行上面推动命令应该就可以了,但是执行后发现报错了提示如下错误400 Bad Request 路径找不到:
- at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:347)
- Caused by: org.eclipse.aether.deployment.DeploymentException: Failed to deploy artifacts: Could not transfer artifact com.gisquest.cloud:platform-rulesengine-client:jar:1.0.7-YWDZ-20220928.030757-1 from/to nexus (http://192.168.11.70:8081/nexus/content/groups/public): Transfer failed for http://192.168.11.70:8081/nexus/content/groups/public/com/gisquest/cloud/platform-rulesengine-client/1.0.7-YWDZ-SNAPSHOT/platform-rulesengine-client-1.0.7-YWDZ-20220928.030757-1.jar 400 Bad Request
最终在同事的帮助下查看了私服仓库中的配置,发现了该http://192.168.11.70:8081/nexus/content/groups/public路径私服仓库的类型是group
nexus中仓库类型proxy、hosted、group 简介
代理仓库(proxy):用来代理远程公共仓库,如Maven中央仓库(即拉取仓库)。
仓库组(group):用来聚合代理仓库和宿主仓库,提供统一的服务地址,以便Maven获得仓库中的构件(即拉取仓库)
宿主仓库(hosted):部署本地项目所产生的构件(即推送仓库)
因此正确的推送命令应该是:私服仓库hosted类型上面命令修改如下即可:
-Durl=http://192.168.11.70:8081/nexus/content/repositories/snapshots/
结论:
推送时:-Durl路径应该是hosted类型的私服仓库地址,项目中一般配置proxy、group类型的都是拉取的仓库的地址