背景
继上一篇,已经成功尝试了deploy到google svn上,接下来尝试deploy到maven central repo
过程
参考资料:http://maven.apache.org/guides/mini/guide-central-repository-upload.html
我这里选择的是Sonatype Oss Responitory做为目标仓库,由sonatype会定时同步到mvn central repo
sonatype的发布步骤:
步骤一:
创建一个jira,填写相应的project信息,我这里创建了一个:https://issues.sonatype.org/browse/OSSRH-1898
主要填写的内容:
- 帐户名/邮箱
- groupId , artifactId信息, project url
步骤二:
耐心等待sonatype管理员的审核,审核通过后,会给你发送邮件,比如加入了它们的mail list,还有对应的mvn repo相关信息
步骤三:
调整pom.xml,添加相关的信息:
- <modelVersion>
- <groupId>
- <artifactId>
- <version>
- <packaging>
- <name>
- <description>
- <url>
- <licenses>
- <scm><url>
- <scm><connection>
- <developers>
<scm>
<url>git@github.com:agapple/mapping4java.git</url>
<connection>scm:git:git@github.com:agapple/mapping4java.git</connection>
<developerConnection>scm:git:git@github.com:agapple/mapping4java.git</developerConnection>
</scm>
修改pom.xml,添加sonatype做为父工程,主要是继承其相关的pom配置
<parent>
<groupId>org.sonatype.oss</groupId>
<artifactId>oss-parent</artifactId>
<version>7</version>
</parent>
最后修改一下settings.xml文件中,添加对应的deploy server的username/password
<servers>
<server>
<id>sonatype-nexus-snapshots</id>
<username>your-jira-id</username>
<password>your-jira-pwd</password>
</server>
<server>
<id>sonatype-nexus-staging</id>
<username>your-jira-id</username>
<password>your-jira-pwd</password>
</server>
</servers>
这里的sonatype-nexus-snapshots,sonatype-nexus-staging都是一个约定,都是通过继承了sonatype pom.xml,可以简化了自己比较多的配置。
步骤四:
测试一下snapshot版本的deploy 运行:
mvn clean deploy
最后,通过Nexus UI进行查看:
步骤五:
尝试一下稳定版本的release.
运行:
$ mvn release:clean
export GPG_TTY=$(tty)
$ mvn release:prepare
运行过程中,会要求输入你对应的版本号信息。
继续下去,会提示你输入对应的PGP密码,相关参考文档: (https://docs.sonatype.org/display/Repository/How+To+Generate+PGP+Signatures+With+Maven)
第一次的化,需要生成一个PGP
$sudo apt-get install gnupg
$gpg --gen-key
按照它的提示,一直默认下去,只需要输入一下自己的name , email , comment,最后会要求你输入一个密码。注意这个密码就是mvn release:prepare需要输入的密码
截一张图看下,可以看下它的提示文字,国外的还是挺可爱的!
最后提交一下public key , gpg --keyserver hkp://pool.sks-keyservers.net --send-keys XXX
步骤六:
生成PGP密钥后,mvn release:prepare就可以正常通过。
最后运行一下:
mvn release:perform
第一次提交,会遇到401错误。
401错误主要是认证失败,继续给管理员留言,请求处理。
补充:
测试过程中,发现使用mvn release:preform一直出现401错误,使用tcpdump进行抓包后,蓦然发现抓到的数据全都是乱码,使用了https。无奈
最后,使用了手工release的方式:
mvn gpg:sign-and-deploy-file -Durl=https://oss.sonatype.org/service/local/staging/deploy/maven2/ -DrepositoryId=sonatype-nexus-staging -DpomFile=mapping-1.0.0.pom -Dfile=mapping-1.0.0.jar
mvn gpg:sign-and-deploy-file -Durl=https://oss.sonatype.org/service/local/staging/deploy/maven2/ -DrepositoryId=sonatype-nexus-staging -DpomFile=mapping-1.0.0.pom -Dfile=mapping-1.0.0-sources.jar -Dclassifier=sources
mvn gpg:sign-and-deploy-file -Durl=https://oss.sonatype.org/service/local/staging/deploy/maven2/ -DrepositoryId=sonatype-nexus-staging -DpomFile=mapping-1.0.0.pom -Dfile=mapping-1.0.0-javadoc.jar -Dclassifier=javadoc
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>2.7</version>
<executions>
<execution>
<id>attach-javadocs</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
<configuration>
<encoding>${file_encoding}</encoding>
<charset>${file_encoding}</charset>
<doclet>org.jboss.apiviz.APIviz</doclet>
<docletArtifact>
<groupId>org.jboss.apiviz</groupId>
<artifactId>apiviz</artifactId>
<version>1.3.0.GA</version>
</docletArtifact>
<useStandardDocletOptions>true</useStandardDocletOptions>
<breakiterator>true</breakiterator>
<version>true</version>
<author>true</author>
<keywords>true</keywords>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>2.1.2</version>
<executions>
<execution>
<id>attach-sources</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
说明: 这里使用了apiviz进行javadocs类图生成,效果如下
步骤七按照文档的要求,给管理员留言,继续等待审核
步骤八
https://docs.sonatype.org/display/Repository/Sonatype+OSS+Maven+Repository+Usage+Guide,按照这里的8. Release It进行release操作,最后就安心的等待同步到mvn central repo。
感触
整个过程下来,还是比较繁琐的,是一次比较不错的体验。希望自己能够多多坚持,多多完善相关的代码。