前几天我不是开源了我的xxy-copybook项目吗,我就想着给他也发布到中央仓库里,大家使用起来也能方便些,这里把我发布的过程记录一下,有需要发布项目需求的小伙伴也可以有个参考。
1、注册Github账号
注册github账号,这个不用多说了,coder都懂。
2、注册sonatype账号
注册地址:issues.sonatype.org/secure/Sign…
他们这个这个密码的复杂程度真是够变态的。长度12位以上,还要需要包括小写、大写字母,数字,特殊符号,不能和用户名和email类似,没有密码记录软件的小伙伴还是找个记事本先记下来吧。
注册好了是这样的,看来他们也知道这个密码太复杂了,怕有人刚才给忽略了,在这里竟然直接提示你可以写一个新密码,这真是太可爱了😊
3、发布申请
万幸我记住了我的密码,接下来登录,然后选择这里进行新建。
\
项目选择:Community Support - Open Source Project Repository Hosting (OSSRH)
问题类型选择:New Project,只有在你的项目选择选对了才会有这个选项。
摘要和描述,根据情况描述一下吧,审核人员不知道会不会中文,所以最好使用英文描述,我的英文一般,只要让审核人员能看懂就OK了。
GroupId:如果你有自己的域名那么就使用你自己的域名,后边会让你验证域名的所有权,需要配置DNS。如果你没有自己的域名,可以使用github提供的二级域名。根据审核人员的要求,会让你在账号上创建项目来验证账号所有权。
Project URL:这里填写你项目的地址,一般就是在github上的项目地址。我这个项目的地址是这个:github.com/radium0028/…
SCM URL:这里是项目的源码地址了,一般是你clone地址。都说只能使用https协议的地址,这个没测试,我们就使用https的地址就好了。我这个项目的地址是这个:github.com/radium0028/…
Usernames,使用逗号分隔的形式,填写可以进行部署的用户列表。可选。
Already synced to central:是否已经同步到中央仓库,这里选No。
这个流程和国内发布很多东西的流程就不一样,国内大部分都会是让你在线验证,然后一直在授权,电子签名,文件盖章,最让我讨厌的是还要打款认证,不让我花点钱,这些厂商心理就不舒服,很少有人工参与到发布过程中。到底是我们的流程效率高,还是老外的流程会更仔细呢?
3.1 验证GroupId信息
在发布申请后sonatype的后台审核人员会确认你是否拥有GroupId的所有权,如果你是自己的个人域名,需要新建一条域名的txt记录,具体的内容要看审核人员给你指导。
如果你和我一样使用github提供的二级域名来作为你的groupid,那么就很简单了,在你发布问题后,会有一个问题ID,就在下边这张图上的内容,在你的github仓库中,创建一个公开的项目,项目名称就是这个ID,这样后台的审核人员就能确认你的groupid权限了。
当你能看到审核人员这样的评论时,就代表你的sonatype账号已经准备好了,可以开始发布你的项目了。
在等待审核员处理的时候你可以继续向下操作,这样就可以在审核人员通过后,立刻发布项目,不要耽误时间。
4、GPG签名
所有发布到Maven仓库中的文件都要使用GPG签名,以便让使用者可以验证文件的正确性,我们需要在本地安装GPG来进行签名。
下载地址:gpgtools.org
安装都是下一步没什么好说的,过程中会让我选中语言,结果只有个英文,那还让我选个毛线~😒
安装后会自动启动,在这里他让我们创建一对秘钥。填写用户名、邮箱、密码就可以了,高级选项都默认。可要把密码记好啊!
秘钥在创建好了以后,它说为了让朋友和同事更方便找到公钥,建议我上传到秘钥服务器上。接着警告我说秘钥服务器是公共的,在秘钥中的名称和电子邮件将公开可见。并且秘钥无法删除,只能撤销。如果不使用这个秘钥服务器,就要考虑将秘钥附加到签名和加密的电子邮件里。我是无脑上传了,名字和email,不发给他也是在互联网上到处飞了,无所谓。
上传成功。
5、配置Maven仓库和项目的POM.xml
5.1 配置Maven仓库
用你喜欢的编辑器打开Maven的setting.xml文件,如果你单独配置过,那么应该到MAVEN_HOME/conf/settings.xml。在文件中添加sonatype的账号信息。如果你不希望使用明文显示你的密码,可以去s01.oss.sonatype.org/申请个token账号进行配置。
将生成的内容,粘贴到你的settings.xml文件中。
<server>
<id>ossrh</id>
<username>you name</username>
<password>you password</password>
</server>
现在重新打开项目的pom.xml文件,配置一下项目信息,主要是使用的开源协议,开发者信息等。根据你的实际情况进行调整。
<!-- 设置开源协议-->
<licenses>
<license>
<name>AGPL-3.0-or-later</name>
<url>https://spdx.org/licenses/AGPL-3.0-or-later.html</url>
</license>
</licenses>
<!-- 设置scm-->
<scm>
<connection>https://github.com/radium0028/xxy-copybook.git</connection>
<url>https://github.com/radium0028/xxy-copybook</url>
</scm>
<!-- 开发者信息-->
<developers>
<developer>
<name>Radium</name>
<email>your email</email>
<roles>
<role>Developer</role>
</roles>
<timezone>+8</timezone>
</developer>
</developers>
5.2 配置release信息
这里的distributionManagement地址要注意一下,从2021年2月份开始,所有新项目的仓库地址都变更到了s01.oss.sonatype.org/。
<profiles>
<profile>
<id>release</id>
<build>
<plugins>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.0</version>
<configuration>
<source>${maven.compiler.source}</source>
<target>${maven.compiler.target}</target>
<fork>true</fork>
<verbose>true</verbose>
<encoding>UTF-8</encoding>
<showWarnings>false</showWarnings>
</configuration>
</plugin>
<!-- Source -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>3.2.1</version>
<executions>
<execution>
<phase>package</phase>
<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.9.1</version>
<configuration>
<show>private</show>
<nohelp>true</nohelp>
<charset>UTF-8</charset>
<encoding>UTF-8</encoding>
<docencoding>UTF-8</docencoding>
<additionalparam>-Xdoclint:none</additionalparam>
</configuration>
<executions>
<execution>
<id>attach-javadocs</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</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>
<distributionManagement>
<snapshotRepository>
<id>ossrh</id>
<name>Sonatype Nexus Snapshots</name>
<url>https://s01.oss.sonatype.org/content/repositories/snapshots/</url>
</snapshotRepository>
<repository>
<id>ossrh</id>
<name>Nexus Release Repository</name>
<url>https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/</url>
</repository>
</distributionManagement>
</profile>
</profiles>
6、发布Jar
都配置好以后就可以打包上次了。在上传的过程中会需要GPG的密码。
mvn clean deploy -P release -DskipTests
当你能看到这些上传成功的内容后,就表示发布成功了,但是还没有结束,我们还需要到repository manager去做最后的发布。
登录到s01.oss.sonatype.org/#stagingRep…,还是使用sonatype注册的账号和密码登录,查看发布后的库情况。
选中你发布的库,然后点击close。
在点击close后,后台会对项目进行一些检查,这些都是机器检查的,速度很快,不到1分钟就能OK。
所有有的检查项目都通过后,点击上边的Release按钮才真正发布你的项目。发布成功后使用groupid进行搜索,没有意外你应该能看到发布的内容啦。
到这里你的库已经上传到Maven中央仓库了,阿里云会逐渐的同步过来,最后别忘记回到sonatype感谢一下帮你发布的审核人员,然后关闭Issue,祝你发布顺利!
7、可能会遇到的问题
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.8.2:deploy (default-deploy) on project xxy-copybook: Failed to deploy artifacts: Could not transfer artifact com.gitee.radium:xxy-copybook:jar:1.0-Release from/to ossrh (https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/): transfer failed for https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/com/gitee/radium/xxy-copybook/1.0-Release/xxy-copybook-1.0-Release.jar, status: 400 Bad Request -> [Help 1]
检查和尝试用下边的几个办法来解决:
- 在pom.xml文件中distributionManagement节点配置下的id标签里的值,要和maven的settings.xml配置文件中server节点下的id是一致的,还要确认你配置的settings.xml是不是maven编译是使用的配置文件。如果使用了token认证,需要在到s01.oss.sonatype.org/去确认token,内容别写错了。
- 看看你pom.xml问你中配置的groupid文件,和你申请的groupid是不是一致。