推送jar库到maven中央仓库
一步一步将项目推送到maven中央仓库
最近工作比较空闲,做了一些实用小工具,在本地直接引用jar包实在是不方便,所以研究了一下如何将项目推送到maven中央仓库。怕日后遗忘,所以写这篇文章记录一下,也方便朋友们借鉴。
一、将代码上传到托管平台
这一步不必多说,想必大家都知道,git,码云,bitbucket都可以。
二、使用sonatype创建工单
非首次推送可忽略,同一groupId只有第一次较繁琐需提交工单,第二次之后推送无需再生成gpg秘钥了,直接到 第四步。
进入sonatype网站:https://issues.sonatype.org 创建账号。
完成之后可以在页面顶部看到如下画面
项目选择:Community Support - Open Source Project Repository Hosting (OSSRH)
问题类型选择:New Project
概要:对要发布的项目作一个简单的描述。
描述选填可以不写。
group id:即将要发布的maven项目的group id。
Project Url:是项目所在地址。
SCM URL:clone项目的地址。
username(s):就是你在该网站注册的用户名。
Already Synced to Centra:是否准备好同步到中央仓库,选择yes的话则会覆盖之前的构建。
填写完成后点击新建,然后等待审核。
如果你使用的是自己的域名,管理员会回复如下信息:
大意就是要使用他们提供的两种方式确认一下这个域名是属于你的。如果这个域名不是你拥有的,那么可以使用他们提供的域名作为group id。
我才用的是他们提供的第一种方法,就是在域名解析添加一条解析,记录类型为TXT,主机记录设为空,记录值是JIRA ticket。
然后回复他们:Yes, this domain is mine. 就ok了(英语不好,不会写太多,简单粗暴就行)。
很快他们就会回复审核通过。
三、安装GPG
GPG下载地址:https://www.gnupg.org/download/index.html
我是Mac,所以下载的GnuPG for OS X,下载下来安装,安装完成之后打开terminal
输入:gpg2 --version
可以查看GPG版本
输入:gpg2 --gen-key
创建密钥对。根据提示输入姓名和邮箱地址,这两个其实不重要,重要的是一定要记住Passphase,相当于你的密码。生成成功之后会显示你的公钥信息。如果没有找到也没事,可以通过输入: gpg2 --list-keys
来查询。
找到生成好的公钥后,输入:
gpg2 --keyserver hkp://pool.sks-keyservers.net:11371 --send-keys [你的公钥] # 可填完整pubKey,但需注意实际上只上传了后缀一部分
把公钥上传到服务器。
检查是否上传成功:
gpg2 --keyserver hkp://pool.sks-keyservers.net --recv-keys [你的公钥] # 可填完整pubKey,但需注意实际上只上传了后缀一部分
特别注意:此步骤非常重要,否则最后mvn deploy的时会校验不通过,亲测在mvn推送时可能会遇到总是No public key错误,可能是密钥服务器延迟的问题,目前也没有好办法,
gpg2 --list-key
查看生成的密钥找到库文件路径删掉,然后重新生成多试几次。
在web上验证是否成功上传gpg密钥到验证服务:
http://pool.sks-keyservers.net
提示一下这里也有一个小坑需注意,搜索条件不能直接粘贴gpg生成的pubkey,需要以十六进制
0x
开头加上 pubkey的后16位字符,例如:
0x758F0F53778F6xxx
或在这里查:http://pool.sks-keyservers.net
查询结果:
注:这里一定要能查到,后面才能deploy,否则会验证不成功。如果一次上传不行就多试几次,貌似我也是测试了几次才行,还有就是注意上传的地址协议开头
"hkp://"
、"hkps://"
还是"http://"
、"https://"
的区别,不行就更换尝试,如果网络连不上就换一个地址试试,如:keyserver.ubuntu.com,万恶的中华局域网w(゚Д゚)w
提示:Sonatype公司会用到三个key-servers,校验时会任意查其中一个,地址分别为:
http://pgp.mit.edu:11371
http://keyserver.ubuntu.com:11371
http://pool.sks-keyservers.net:11371
三、配置Maven
修改maven全局配置文件setting.xml,找到,在里面添加如下信息:
<server>
<id>sonatype-nexus-snapshots</id>
<username>sonatype用户名</username>
<password>sonatype密码</password>
</server>
<server>
<id>sonatype-nexus-staging</id>
<username>sonatype用户名</username>
<password>sonatype密码</password>
</server>
将用户名和密码改成之前注册的sonatype的用户名密码就好了。
由于我安装的是GPG2所以要需要在下面修改一个地方,找到<profiles></profiles>,添加:
<profile>
<id>gpg</id>
<properties>
<gpg.executable>gpg2</gpg.executable>
<gpg.passphrase>mypassphrase</gpg.passphrase>
</properties>
</profile>
找到<activeProfiles></activeProfiles>,添加:
<activeProfile>gpg</activeProfile>
完成后保存退出。
在待上传的项目中的pom.xml中添加:
<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>开发者名</name>
<email>开发者邮箱</email>
</developer>
</developers>
<scm>
<connection>scm:项目的ssh地址</connection>
<developerConnection>scm:项目的ssh地址</developerConnection>
<url>项目地址</url>
</scm>
<profiles>
<profile>
<id>release</id>
<build>
<plugins>
<!-- Source -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<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>
<executions>
<execution>
<phase>package</phase>
<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>
<phase>verify</phase>
<goals>
<goal>sign</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<distributionManagement>
<snapshotRepository>
<id>sonatype-nexus-snapshots</id>
<url>https://oss.sonatype.org/content/repositories/snapshots/</url>
</snapshotRepository>
<repository>
<id>sonatype-nexus-staging</id>
<url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
</repository>
</distributionManagement>
</profile>
</profiles>
将上面配置中的汉字内容替换为对应的信息就完成了。
四、推送到Maven中央仓库
大功告成,可以通过deploy推送了使用下面代码推送到maven中央仓库:
mvn clean deploy -P release
看到显示BUILD SUCCESS后就可以愉快的到中央仓库(https://oss.sonatype.org
,使用sonatype账号登陆 -> 左边点击 Staging Repositories),找发布的项目了。
当然前提是sonatype中创建的工单要审核通过,如果审核还没有通过是发布不了的,项目会在Staging Repositories菜单里。等审核通过后你需要选择你的项目,然后先点击close,顺利close之后(也就是在activity标签中没有报错信息,并且项目对应的status变为closed),再点一下release,等待release结束之后就完成了。
五、最后别忘了通知管理员关闭工单
在之前的工单下面添加一条备注,我写的:This Component has been successfully released, thank you.(也不知道有没有语病)。等管理员审核通过关闭了这个工单就算彻底完成了。
是不是很麻烦?没关系,只有第一次会这么麻烦,今后只要group id没有发生变化就可以直接推送,不需要在做这些繁琐的工作了。
附maven仓库搜索地址:https://search.maven.org/,以上工序都完成后可以在这个地址搜到自己推送的组件。