须要4步
- 创立sonatype账号,并提交工单
- 设置gpg
- maven环境配置
- deploy
1.创立sonatype账号,并提交工单
1.1 关上 https://issues.sonatype.org 注册账号
- 信息都很简略,Full name轻易写个就好
1.2 创立工单
- 登陆后点击Create创立工单
而后开始工单信息的填写
- 其中groupId能够间接应用com.github.xxx,当然pom外面也要和这个对应上
- 其中groupId能够间接应用com.github.xxx,当然pom外面也要和这个对应上
1.2.1 如何应用集体域名作为groupId
首先要买个和groupId对应的域名
- 例如自己的我的项目groupId为
com.insistingon.binlogportal
- 那么对应的域名就是
insistingon.com
- 例如自己的我的项目groupId为
设置域名的DNS配置给sonatype检测
- 当应用集体域名提交工单时,工单的comment外面会提醒
须要证实这个域名的所有人,有两种形式
- 加DNS的TXT记录
- 重定向到你的github我的项目页面
- 这里抉择第一种比较简单,在购买域名的服务商页面,批改下DNS记录即可。
- 增加后即可通过验证
- 当应用集体域名提交工单时,工单的comment外面会提醒
2. 设置gpg
2.1 gpg是什么?
- gpg是一个应用RSA算法加解密的软件
- 有公网的公开仓库,能够上传公钥,供其余服务解密。简略说就是有公网的加解密服务
- sonatype要求推送的jar包要加密,并会依据信息去公网的仓库验证,胜利能力公布。
2.2 装置gpg
- mac上间接应用
brew install -v gpg
装置
2.3 生成公钥
生成命令
gpg --generate-key
- 执行命令后,会弹出设置
passphrase
的界面,就是明码,要记住,之后用到maven中 - 生成后,会有一串字符,即为公钥的key,用于向公共仓库上传公钥
- 执行命令后,会弹出设置
2.4 上传公钥
- 生成后须要将公钥上传到公共服务器供sonatype验证
sonatype应用的三个公共仓库地址,上传任意一个即可,
- http://keys.openpgp.org:11371
- http://keyserver.ubuntu.com:11371
- http://pool.sks-keyservers.net:11371
- 上传命令
gpg --keyserver http://keys.openpgp.org:11371 --send-keys 398A7FD459F278FB0069E831IK98L741C1A767A2
留神
- 再上传时,如果只应用域名,不加端口,也能够胜利,然而sonatype验证时会提醒找不到key,起因暂未深究。
3. maven环境配置
- 之后要应用maven间接上传jar包到sonatype的仓库中
- 须要对.m2/setting.xml和我的项目的pom.xml做一些设置
3.1 将sonatype和gpg信息写入settings.xml
- sonatype的信息配置在server中,供deploy的时候应用
<servers> <server> <id>ossrh</id> <username>name</username> <password>password</password> </server></servers>
- gpg的信息设置在profile中,供maven的gpg插件应用
<properties> <gpg.executable>gpg可执行命令门路</gpg.executable> <gpg.passphrase>生成时填写的passphrase</gpg.passphrase></properties>
3.2 我的项目中的pom配置
- 次要有两局部,deploy时的信息和要用到的插件
3.2.1 deploy时的信息包含证书,开发者信息,仓库地址和公布地址
<licenses> <license> <name>The Apache Software License, Version 2.0</name> <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url> <distribution>actable</distribution> </license></licenses><developers> <developer> <name>dothetrick</name> <email>flyinthewar@126.com</email> <organization>dothetrick</organization> </developer></developers><scm> <tag>master</tag> <url>git@github.com:dothetrick/binlogportal.git</url> <connection>git@github.com:dothetrick/binlogportal.git</connection> <developerConnection>git@github.com:dothetrick/binlogportal.git</developerConnection></scm><distributionManagement> <snapshotRepository> <id>ossrh</id> <url>https://oss.sonatype.org/content/repositories/snapshots</url> </snapshotRepository> <repository> <id>ossrh</id> <name>Nexus Release Repository</name> <url>http://oss.sonatype.org/service/local/staging/deploy/maven2/</url> </repository></distributionManagement>
3.2.2 要用到的maven插件
要应用的插件
- maven-javadoc-plugin
- maven-jar-plugin
- maven-source-plugin
- maven-gpg-plugin
- nexus-staging-maven-plugin
- 应用这些插件是为了生成sonatype要求的各种包
3.2.3 maven-gpg-plugin报错的解决
- 在应用时发现maven-gpg-plugin执行报错,
Exit Code:2
- 这个谬误是应为下载的gpg版本和maven-gpg-plugin中版本抵触
- 通过增加如下两个配置文件解决
- gpg.conf
use-agentpinentry-mode loopback
- gpg-agent.conf
allow-loopback-pinentry
- 理论配置如下
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-javadoc-plugin</artifactId> <version>3.2.0</version> <executions> <execution> <id>attach-javadocs</id> <phase>package</phase> <goals> <goal>jar</goal> </goals> <configuration> <additionalOptions> <additionalOption>-Xdoclint:none</additionalOption> </additionalOptions> </configuration> </execution> </executions></plugin><plugin> <artifactId>maven-jar-plugin</artifactId> <version>3.0.2</version> <configuration> <archive> <manifestEntries> <Built-By>dothetrick</Built-By> </manifestEntries> </archive> </configuration></plugin><plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-source-plugin</artifactId> <executions> <execution> <id>attach-sources</id> <goals> <goal>jar-no-fork</goal> </goals> </execution> </executions></plugin><plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-gpg-plugin</artifactId> <version>1.6</version> <executions> <execution> <id>sign-artifacts</id> <phase>package</phase> <goals> <goal>sign</goal> </goals> </execution> </executions></plugin><plugin> <groupId>org.sonatype.plugins</groupId> <artifactId>nexus-staging-maven-plugin</artifactId> <version>1.6.8</version> <extensions>true</extensions> <configuration> <serverId>ossrh</serverId> <nexusUrl>https://oss.sonatype.org/</nexusUrl> <autoReleaseAfterClose>false</autoReleaseAfterClose> </configuration></plugin>
4. deploy
- 配置好maven后,之后能够通过
mvn deploy
间接推送包到sonatype - 这里设置的是推送后不会主动Release,因为超慢,不晓得要多久
- 所以最好是推送后,在页面上手动执行下release。
重要提醒
- 在公布新版本时,务必先执行
mvn clean
将target中老版本的jar包删除 - 不然在公布到nexus后,版本包中会带有老版本的jar包,导致release失败
- 在公布新版本时,务必先执行
让jar包更快的在地方仓库被搜寻到
- 当通过maven把jar胜利公布到nexus并且release胜利后,等了2个小时,也无奈在maven地方仓库搜到
- 网上找了N久无果,打算提工单询问了。忽然想试下通过maven能不能下载到,新建一个我的项目,删除本地m2外面的包缓存,在pom里援用,发现胜利了。再去maven地方仓库一搜,就搜到了。。
- 之后又发了两个版本做试验,确认了,如果不应用maven依赖包的话,等8个小时也搜不到。只有maven下载一次,立马进去了。。
以上内容属集体学习总结,如有不当之处,欢送在评论中斧正