maven推送本地jar包到nexus仓库遇到的问题

场景:

今天使用jenkins打包镜像时,发现其中一个jar包私服仓库没有,本地是有的,因此遇到如何从本地向nexus仓库推送的问题(之前没有推过现在遇到一些坑特此记录一下)

问题:

如何正确地从本地向nexus仓库推送jar包

目标:

将本地的   latform-rulesengine-client 的jar包推送到nexus上    

<dependency>
            <groupId>com.gisquest.cloud</groupId>
            <artifactId>platform-rulesengine-client</artifactId>
            <version>1.0.7-YWDZ-SNAPSHOT</version>
   </dependency> 

网上搜索了解决方案:

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类型的都是拉取的仓库的地址