总体来说我也是结合本站各位同学写的操作步骤执行,但是过程中遇到了很多问题。现回顾整理记录下整过过程。以备后续同学借鉴。
目标:把自己开发的工具jar包上传至maven官方中心库,以供其他人dependency
引用。
一、准备
开始要注意这个几个Maven相关地址:
① https://issues.sonatype.org 工单管理地址,就是申请上传资格和groupId
的地方。
② https://oss.sonatype.org/#welcome 构件仓库,把jar包上传到这里,Release
之后就会同步到maven中央仓库。
③ http://search.maven.org/ 最终表现在可以在这里搜索到。
部分网址第一次打开有点慢,请稍等。
二、创建工单
从https://issues.sonatype.org 注册一个帐号(已经有请忽略),账号密码要记住,下面登录账号密码还要用这个。
可参考地址:https://www.sojson.com/blog/250.html
注意:如果您在创建时发现弹出框中,没有关于group Id 、project url等填写地方,那么说明首次进入方式可能不对,这块我也吃亏了(英文不好的同学推荐谷歌浏览器翻译),
可通过此地址进入:https://issues.sonatype.org/secure/CreateIssue.jspa?issuetype=21&pid=10134#
还不行参考官网介绍:https://central.sonatype.org/pages/ossrh-guide.html
等到审核通过状态会变为RESOLVED
,第一次审核要一天左右 。
注意:其实整个过程都可以和issues的互动交流,不会的百度翻译后再发。
例如我用的自己域名证书证明域名 www.iussoft.com 是我的,沟通截图如下:
图上最后这段英文大概意思是:
- 你的配置已经完成了,可以进入工作了。
- 上传快照版本的地址为….
- 上传发布版本的地址为…
- 暂存库中是用来为发布做准备的。
- 下载快照以及发布版本的地址为…
- 下载快照、发布以及暂存库的地址为…
- 另外当你第一次上传到库中的时候请在这里说一下你已经上传了(只有第一次的时候,后面不需要,第一次他那边会进行一些配置)
三、GPG环境的安装
安装过程,我就不细说了,网上很多大拿都写过。可参考这些地址:
https://www.sojson.com/blog/250.html
https://blog.csdn.net/hupoling/article/details/78511899
https://blog.csdn.net/cc_want/article/details/77943340
我自己本次cmd内创建gpg大概最终输出:
gpg: key 546767CAA6532AB0 marked as ultimately trusted
public and secret key created and signed.
pub rsa2048 2018-08-28 [SC] [expires: 2020-08-27]
A48B4D0CA1D660DA5966C119546767CAA6532AB0
uid hexin <hexin*******@163.com>
sub rsa2048 2018-08-28 [E] [expires: 2020-08-27]
其中 546767CAA6532AB0 就是申请的key
1)查看我的key
gpg --list-keys
最后注意 keyserver 上传到服务端:
2)上传命令例如:[末尾参数替换自己key分别执行下面命令]
gpg --keyserver hkp://pool.sks-keyservers.net --send-keys 546767CAA6532AB0
gpg --keyserver hkp://keyserver.ubuntu.com:11371 --send-keys 546767CAA6532AB0
3)查看是否上传成功命令:[l末尾参数替换自己key分别执行下面命令]
gpg --keyserver hkp://pool.sks-keyservers.net --recv-keys 546767CAA6532AB0
gpg --keyserver hkp://keyserver.ubuntu.com:11371 --recv-keys 546767CAA6532AB0
四、配置Maven Settings.xml & pom.xml
我这块也是耗时最多的(主要也是第一次整),中间也和issues互动交流过遇到的问题。主要参考下面的地址;
https://central.sonatype.org/pages/requirements.html
我的最终Settings.xml配置:
<servers>
...
<server>
<id>sonatype-nexus-snapshots</id> <!-- 自定义设置,但是后面要用 -->
<username>https://issues.sonatype.org官网注册用户名称</username>
<password>https://issues.sonatype.org官网注册用户密码</password>
</server>
<server>
<id>sonatype-nexus-staging</id> <!-- 自定义设置,但是后面要用 -->
<username>https://issues.sonatype.org官网注册用户名称</username>
<password>https://issues.sonatype.org官网注册用户密码</password>
</server>
...
<servers>
其实可以配置一组被共用就行,我为了区分就分开配置了,两组账户和密码信息一样即可。
我的最终项目的pom.xml配置:
最好使用maven快照版本,至于和发布版本的区别参考介绍地址:https://www.cnblogs.com/wuchanming/p/5484091.html
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.iussoft</groupId>
<artifactId>iussoft-api</artifactId>
<version>3.0.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>${project.groupId}:${project.artifactId}</name>
<description>
Iussoft Open API for Java
Copyright (C) http://www.iussoft.com
All rights reserved.
</description>
<url>http://www.iussoft.com</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<spring.framework.version>4.3.7.RELEASE</spring.framework.version>
<java.version>1.7</java.version>
<maven.compiler.source>${java.version}</maven.compiler.source>
<maven.compiler.target>${java.version}</maven.compiler.target>
</properties>
<licenses>
<license>
<name>The Apache Software License, Version 2.0</name>
<url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
</license>
</licenses>
<developers><!-- 配置开发者信息 -->
<developer>
<name>iussoft</name>
<email>hexin********@163.com</email>
</developer>
</developers>
<scm>
<connection>scm:git:git@gitee.com:iu******orm.git</connection>
<developerConnection>scm:git:git@gitee.com:iu******orm.git</developerConnection>
<url>https://gitee.com/ius******orm</url>
<tag>1.0</tag>
</scm>
<distributionManagement>
<snapshotRepository>
<id>sonatype-nexus-snapshots</id> <!-- 等于上面Settings.xml中server的id值。-->
<name>oss Snapshots Repository</name>
<url>https://oss.sonatype.org/content/repositories/snapshots</url>
</snapshotRepository>
<repository>
<id>sonatype-nexus-staging</id> <!-- 等于上面Settings.xml中server的id值。-->
<name>oss Staging Repository</name>
<url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
</repository>
</distributionManagement>
<dependencies>
......
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<addMavenDescriptor>false</addMavenDescriptor>
</archive>
</configuration>
</plugin>
<!-- 必须配置 source-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>2.2.1</version>
<executions>
<execution>
<id>attach-sources</id>
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
<!-- 必须配置 javadoc-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>2.10.3</version>
<executions>
<execution>
<id>attach-javadocs</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
<!-- 必须配置 sonatype-->
<plugin>
<groupId>org.sonatype.plugins</groupId>
<artifactId>nexus-staging-maven-plugin</artifactId>
<version>1.6.7</version>
<extensions>true</extensions>
<configuration>
<serverId>sonatype-nexus-staging</serverId> <!-- 等于上面Settings中server的id值。-->
<nexusUrl>https://oss.sonatype.org/</nexusUrl>
<autoReleaseAfterClose>true</autoReleaseAfterClose>
</configuration>
</plugin>
<!-- 必须配置 GPG-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-gpg-plugin</artifactId>
<version>1.6</version>
<executions>
<execution>
<id>sign-artifacts</id>
<phase>verify</phase>
<goals>
<goal>sign</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
几点注意事项:
1、developers和scm信息:最好用你代码所在git的账户信息和git地址信息。
2、distributionManagement中的信息:id保持一样,注意别多空格。
3、plugins内插件配置,source、javadoc、sonatype、gpg等,注意先maven下载相关引用jar。
4、<autoReleaseAfterClose>true</autoReleaseAfterClose>配置是标识Release自动发布,但是我们首次发布后,最好再去之前issues.sonatype.org上提交的工单反馈下。
五、部署、上传
1)CMD命令窗口:部署命令执行可以使用:
mvn deploy -Dmaven.test.skip=true -e
2)idea工具配置及执行
配置完成后,先clean再deploy,同时会分别打包jar,pom,javadoc,sources等信息,若有问题会失败,请先解决错误。
然后上传时输入之前创建gpg时设置的密码。
如上图,第一个success表示部署成功(上传成功)此时可以在https://oss.sonatype.org/ 登录查看信息,登录信息和 issues注册的一样。
最终可以按照自定义的group Id搜索最新提交的版本信息。如下图我的3.0.2;
等待发布成功,其实在https://oss.sonatype.org/content/groups/public/ 这个里面就能找到。
而想在central中看到,一般第一次和issues提交工单沟通后,就是我发布完了。有时候自动就回复了。大概回复如下。
大概意思2个小时左右就可以看到了。
六、项目中应用
一般我们在项目开发阶段为了方便团队合作,推荐使用快照版。而正式上线或者版本稳定的推荐使用发布版,具体介绍参考:
https://www.cnblogs.com/wuchanming/p/5484091.html
项目pom.xml配置
1)首先需要启用快照库
方式一:修改每个项目pom.xml
<!-- 开发版推荐使用快照库、正式版删除如下repository配置 -->
<repositories>
<repository>
<id>nexus</id>
<name>Nexus Mirror</name>
<url>https://oss.sonatype.org/content/groups/public/</url>
<snapshots>
<enabled>true</enabled><!-- 启用 -->
<updatePolicy>always</updatePolicy><!-- 实时更新 -->
</snapshots>
</repository>
</repositories>
方式二:修改统一配置文件settings.xml
参考地址:https://blog.csdn.net/shenzhen_zsw/article/details/78409917
2)引用配置
<dependencies>
<dependency>
<groupId>com.iussoft</groupId>
<artifactId>iussoft-api</artifactId>
<version>2.0.3-SNAPSHOT</version> <!-- 使用SNAPSHOT版-->
</dependency>
</dependencies>
七、总结
1)一般遇到问题,可以在网上搜索资料,排查。本人推荐最后是直接和https://issues.sonatype.org/官网的工单上和工作人员进行互动(可能花费时间长点,但是能给你相关正确的参考地址)。
2)group id命名 和OSSRH相关操作,最好参考https://central.sonatype.org/pages/ossrh-guide.html
3)登录账号密码最好别有@符号。
4)deploy时报403错误是,及时反馈issues官网工单,让其改权限(我在这块一直以为是自己本地配置问题)。
5)deploy时报错,* Missing Signature: '*****.jar.asc' does not exist for '***.jar'.等错误时,其实是无法用gpg进行jar文件签名生成对应的asc文件。这种情况可以排查本地gpg环境是否安装,配置正确;同时排查下生成的key是否已经上传到keyserver服务端。
6)整过过程连接国外网站,网络断断续续,或者比较缓慢,需要耐心等待。
7)开发过程中因为版本不稳定,推荐使用快照库,等部署或者稳定后使用发布版。