最近在开发推送SDK,在做push sdk的服务端sdk的java版本的时候,就一直想把client能构建到Maven中央仓库,方便开发者使用。
项目git地址 : https://github.com/MOBX/mobpush-api-java-client 有需要可以参考下,主要是里面的pom.xml ,下面的也会用到。
先上结果 http://search.maven.org/#artifactdetails%7Ccom.mob.sdk.push ,其实网上也有很多教程,但是还是不是很清晰,好像都是一个版本来的,没有给我等使用windows屌丝的具体指明完整道路,顾记录此文章。
下面说下具体步骤把 :
1、注册sonatype账号
因为Maven中央仓库是由sonatype免费给维护的,所以需要到 https://issues.sonatype.org/secure/Signup!default.jspa 注册sonatype账号。一定要记得此账号密码,后面配置maven的servers节点需要用到此账号和密码。
还需要记录一个地址 : https://oss.sonatype.org (这个后面issues里面也有会连接的)
这个就是私服仓库了,可以在里面查看到jar的状态等信息
2、创建发布申请的issues
可以到地址https://issues.sonatype.org/secure/CreateIssue.jspa?issuetype=21&pid=10134 去发布申请的issues,里面有需要注意填写的内容
- Group Id : 这个填写你maven项目的Group Id 就好了,但是有注意这个可能在审核issues的时候,工作人员会询问是否有group id的所有权。
* SCM url : 这个就需要填写源代码的路径,需要审核issues的人员能访问,我使用的是github (https://github.com/MOBX/mobpush-api-java-client) 这个也是需要后面在项目pom.xml里面配置scm标签的。
- Project URL: 这个我这里填写的是官网地址
其他没啥了,可以的话按照要求填写相关的描述即可,提交和需要等待审核,这个需要点时间,应该要看情况吧,我提交的issues审核很快就通过,自己多关注下哈,也会有邮件通知的。
等到issues的状态变更为Resolved就可以了,看到下面这个图表示你已经成功通过了开始的审核,后面就可以进行构建上传了。
3、使用 GPG 生成密钥对
需要下载一个GPG 来进行文件加密,windows 可以到地址 https://www.gpg4win.org/download.html 下载 按照步骤安装即可。
在安装目录的bin下打开Kleopatra即可
在窗口上进入 文件--> 新建密钥对-->创建个人OpenPGP密钥对
输入名称和邮箱,一直下一步下一步到输入密码界面,这里的密码需要记住,是后面maven打包的时候需要输入的确认密码
4、maven配置和pom.xml配置
在您maven的setting.xml 加入如下配置:
<servers>
<server>
<id>自定义id,需要和后面pom.xml对应即可,如ossrh</id>
<username>您申请的sonatype账号</username>
<password>sonatype账号对应密码</password>
</server>
</servers>
在您项目的pom.xml 增加其中没有的配置(如下是 mobpush client for java 的一个pom.xml例子):
<?xml version="1.0"?>
<project
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<groupId>com.mob.sdk.push</groupId>
<artifactId>mobpush-api-java-client</artifactId>
<!-- 请不要使用SNAPSHOT版本不然后面步骤不能继续-->
<version>1.0.0</version>
<name>mobpush-api-java-client</name>
<url>https://github.com/MOBX/mobpush-api-java-client</url>
<description> MobPush API for Java </description>
<licenses>
<license>
<name>The Apache License, Version 2.0</name>
<url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
</license>
</licenses>
<developers>
<developer>
<name>hlliu</name>
<email>hlliu@youzu.com</email>
<organization>mob</organization>
<organizationUrl>http://www.mob.com</organizationUrl>
</developer>
</developers>
<!-- 保持和申请的issues里面填写的scm一致 -->
<scm>
<connection>
scm:git:https://github.com/MOBX/mobpush-api-java-client.git
</connection>
<developerConnection>
scm:git:https://github.com/MOBX/mobpush-api-java-client.git
</developerConnection>
<url>https://github.com/MOBX/mobpush-api-java-client</url>
<tag>1.0.0</tag>
</scm>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<github.global.server>github</github.global.server>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<jdkVersion>1.6</jdkVersion>
<jdkVersion.test>1.6</jdkVersion.test>
</properties>
<dependencies>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.3</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.7</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.7</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.31</version>
</dependency>
</dependencies>
<profiles>
<profile>
<!-- 打包的 -P参数 -->
<id>release</id>
<build>
<plugins>
<!-- Source -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>2.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>
<!-- -Xdoclint:none 是为了生存apidoc的时候检查不必太严格-->
<configuration>
<additionalparam>-Xdoclint:none</additionalparam>
</configuration>
<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需要和setting.xml 配置的service的id一致 -->
<id>ossrh</id>
<url>https://oss.sonatype.org/content/repositories/snapshots</url>
</snapshotRepository>
<repository>
<id>ossrh</id>
<url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
</repository>
</distributionManagement>
</profile>
</profiles>
</project>
注意:以上 pom.xml 必须包括:name、description、url、licenses、developers、scm 等基本信息,此外,使用了 Maven 的 profile 功能,只有在 release 的时候,创建源码包、创建文档包、使用 GPG 进行数字签名。此外,请注意pom.xml里面注释需要保持一致的地方。
5、构建发布jar
进入您项目执行maven命令
mvn clean deploy -P release verify -Dgpg.passphrase={您PGP密码}
-P release是构建环境,需要和pom.xml里面配置一致,在执行过程中,会弹出提示框让你输入PGP的密码,输入后确认即可,看网络情况,我本地上传比较快,大概1分钟就好了
6、在OSS中发布构件
以为进行第5步就OK了,还需要继续呢,需要在OSS里面发布构建,登陆 https://oss.sonatype.org (使用 sonatype 申请的账号和密码即可)
登陆后选择Staging Repositories ,可以看到您刚上传的的是open状态,勾选后点击上面的Close即可,会弹框确认,确认就好了。
(需要等待N分钟,也许1分钟就好了)
重新刷新本页面,看到您上传的项目是close状态,此时再勾选后选择上面的Release,也会提示弹框确认,确认就好了。
7、通知关闭issues
以上步骤完成后,就等待最终的审核了。到您申请的issues的页面 增加备注 “The component has been successfully released”(告知就好了,怎么写自己看着办),好了 ,确实已经到了最后审核了 我提交的大概1、2个小时就好了,好了也会有邮件通知的。
审核通过后可以到 http://search.maven.org 查看,就如我开始给的结果,over ~