说明
要想将自己的java工具提交到maven中央仓库并公开,但是maven中央仓库是不允许我们直接上传jar包到它上面的,因此我们只能将jar包发布到它指定的第三方maven仓库,然后这个仓库再将jar包同步到中央仓库。而sonatype的OSSRH仓库就是被认可的第三方仓库之一,所以我们选择把jar包先发布到这上面来。
1、注册
注册sonatype的账号,注册地址:https://issues.sonatype.org/secure/Signup!default.jspa
注册比较简单,填一下邮箱、姓名、用户名和密码后,点击sign up就完成了。
2、提交issue
登录完成后,语言可以选择中文,在system dashboard页面中,点击上方导航栏上的新建按钮,就可以创建一个issue,我看也有地方把这个issue称为工单。
要填的东西有点多,我们分两页看,先看第一页:
填写完后,点击新建即可(我这里由于是已经提交了的,所以是更新按钮)
3、 等待几分钟后,就会收到OSSRH的回复,如下图
如果是自己的域名,则需要在域名解析中增加 TXT的解析,如下图:
如果是io.github.mose-x 这种git域名的,则需要新建创建完整的公开的git仓库,如下两个图(网上找的)
之后就是等待回复了,回复结果如下,则表示可以推送你的java工具了
4、 GPG密匙处理
接下来,我们需要使用gpg生成秘钥,在后续包发布jar时会根据生成的秘钥进行校验,因为sonatype也需要对上传这一行为进行权健的校验,避免无意义或恶意上传文件的行为。
a、安装gpg
官网下载地址:https://www.gnupg.org/download/
window版下载地址:https://files.gpg4win.org/gpg4win-4.0.4.exe
我在下载了window版的安装文件后,一路无脑点击下一步就可以完成安装了。
b、创建秘钥
在安装完成gpg后,在命令行下通过指令来生成一个秘钥:
gpg --gen-key
在生成的过程中,首先会要求输入姓名和邮箱地址,在命令行窗口下填完这两个信息后,还会弹窗要求输入一个密码:
这个密码非常重要,一定要记住,后面在项目deploy的时候还会用到。填完后继续,秘钥就会成功生成并保存在本地目录下了:
c、上传秘钥
在秘钥生成完后,我们需要把公钥上传到公共服务器供sonatype验证,可以通过下面的命令将公钥上传:
gpg --keyserver hkp://keyserver.ubuntu.com:11371 --send-keys XXXXX
虽然我这里一次就上传成功了,但是在看其他教程的过程中,也可能会出现失败的情况,这种情况可以尝试上传到其他的存放公钥的服务器:
● pool.sks-keyservers.ne
● keys.openpgp.org
● pgp.mit.edu
端口的话都是11371,这些公钥服务器间会同步它们的数据给其他服务器,所以只要上传成功到其中一台就行。
5、 maven设置
maven 设置
接下来需要修改本地maven的配置,为了保险起见,我建议大家最好同时修改.m2和conf目录下的配置文件,否则有可能出现一些奇怪的问题。
a、server
首先在配置文件中添加一个server节点,配置sonatype的用户名及密码:
<servers>
<server>
<id>ossrh</id>
<username>${sonatype username}</username>
<password>${sonatype password}</password>
</server>
</servers>
b、profile
接着添加一个profie节点,配置gpg信息,这里就需要填入在生成gpg秘钥过程中,我们在弹窗中输入的密码了:
<profiles>
<profile>
<id>ossrh</id>
<properties>
<gpg.executable>gpg</gpg.executable>
<gpg.passphrase>${弹窗输入的那个密码}</gpg.passphrase>
</properties>
</profile>
</profiles>
<activeProfiles>
<activeProfile>ossrh</activeProfile>
</activeProfiles>
在修改完成后,可以在命令行窗口下,通过命令查看我们修改过的配置是否已经生效了:
mvn help:effective-settings
如果显示的内容和配置文件中的一样,那么恭喜,后面就只还剩下亿点点工作了。
6、 项目pom修改
在maven环境修改完成后,我们还需要对项目的pom文件进行一些修改。
a、基础信息
如果我们之前的代码中,groupId和sonatype上注册的不一致,那么需要修改项目的groupId改为一致。既然都要发布了,顺便也把version改为release版本吧。
<groupId>io.github.trunks2008</groupId>
<artifactId>ulquiorra-cache</artifactId>
<version>0.0.1-RELEASE</version>
b、distributionManagement
添加distributionManagement信息,声明要打包到sonatype的maven仓库中去。
<distributionManagement>
<snapshotRepository>
<id>ossrh</id>
<url>https://s01.oss.sonatype.org/content/repositories/snapshots</url>
</snapshotRepository>
<repository>
<id>ossrh</id>
<url>https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/</url>
</repository>
</distributionManagement>
c、plugins
这里需要添加各种plugin插件,除了常用的maven-compiler和maven-deploy插件外,还需要下面几个关键插件:
● nexus-staging-maven-plugin:sonatype插件,用来将项目发布到中央仓库使用
● maven-source-plugin:生成java source.jar文件
● maven-javadoc-plugin:生成java doc文档
● maven-gpg-plugin:对文件进行自动签名
使用到的全部插件详细配置如下,直接拷到项目中就可以使用:
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<!-- sonatype插件,发布使用-->
<plugin>
<groupId>org.sonatype.plugins</groupId>
<artifactId>nexus-staging-maven-plugin</artifactId>
<version>1.6.7</version>
<extensions>true</extensions>
<configuration>
<serverId>ossrh</serverId>
<nexusUrl>https://s01.oss.sonatype.org/</nexusUrl>
<autoReleaseAfterClose>true</autoReleaseAfterClose>
</configuration>
</plugin>
<!-- 生成java source.jar -->
<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>
<!-- 生成java doc文档 -->
<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>
<phase>package</phase>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
<!-- 工程文件自动签名-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-gpg-plugin</artifactId>
<version>1.5</version>
<executions>
<execution>
<id>sign-artifacts</id>
<phase>verify</phase>
<goals>
<goal>sign</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
</plugins>
至于在idea中,插件经常下载失败报红线的问题,个人测试可以先把它们加到dependencies中拉取下来,成功率能高不少…
d、开源签名证书
添加license信息,使用Apache Licene 2.0 协议就行。
<licenses>
<license>
<name>The Apache Software License, Version 2.0</name>
<url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
<distribution>repo</distribution>
</license>
</licenses>
e、仓库信息
在这里填写一下项目的地址,把我们的github仓库地址贴上去就可以了。
<scm>
<url>
https://github.com/mose-x/query-dsl-plus
</url>
<connection>
scm:git@github.com/mose-x/query-dsl-plus.git
</connection>
<developerConnection>
scm:git@github.com/mose-x/query-dsl-plus.git
</developerConnection>
</scm>
f、开发人员信息
补充开发者的个人信息,虽然估计也没什么人会联系我就是了。
<developers>
<developer>
<name>mose-x</name>
<email>mose-x@qq.com</email>
<organization>https://github.com/mose-x</organization>
<timezone>+8</timezone>
</developer>
</developers>
g. 补充额外信息
<name>query-dsl-plus</name>
<description>a tool about bilayer cache</description>
<url>https://github.com/mose-x/query-dsl-plus</url>
h. 打包发布
java程序中执行 clean deploy
mvn clean deploy -DskipTests
-Dmaven.wagon.http.ssl.insecure=true
-Dmaven.wagon.http.ssl.allowall=true
出现如下,即成功
并且在OSSRH中也能收到反馈
结果:
然后就是等待了!
账号密码和上面注册的ossrh一致
https://s01.oss.sonatype.org
一般30分钟后能查看
https://repo1.maven.org/maven2/
一般4小时后能查看
https://search.maven.org/
一般24小时后能查看
https://mvnrepository.com/