1. 简介
最近经常有人咨询开源项目如何把jar发布到maven中央库的问题,JD Chain作为开源项目,也已经在maven中央库上发布了多个版本,在这里跟大家讲讲jar发布的一些细节。希望对开源爱好者有所帮助。
2. 步骤
2.1. 创建工单
登录网址:https://issues.sonatype.org
点击:Create,按照下图提示添加。
![824cc14fbf6d2e8ad876a5db090c64ce.png](https://i-blog.csdnimg.cn/blog_migrate/da0d6e9e67b0f82896f169fd6301be86.jpeg)
2.2. GPG环境
我们需要一个GPG环境,用来对上传的文件进行加密和签名,保证你的jar包不被篡改,下载地址:https://www.gpg4win.org/
安装完成后 命令行窗口中输入 gpg –version 查看是否安装成功。
在图形化界面中可以很快捷的生成一个证书。
![9ba581f504e7da63d1f84790f3f46a5f.png](https://i-blog.csdnimg.cn/blog_migrate/e8a5a5864928f1278dfdb4a9cc16ce50.png)
点击“证书”,即可看到相应的key。
公钥指纹:F3B988EE48D8C34C。
在发布的时候,不必非使用原先发布采用的证书,也可以全新生成证书,然后把公钥上传至服务器即可。具体如下:
##把公钥上传至服务器;
再次查看本地公钥私钥
gpg --list-keys
上传公钥到服务器
gpg --keyserver hkp://pool.sks-keyservers.net:11371 --send-keys [公钥]
gpg --keyserver hkp://pool.sks-keyservers.net:11371 --send-keys F3B988EE48D8C34C
gpg --keyserver keyserver.ubuntu.com --send-keys F3B988EE48D8C34C
gpg --keyserver pgp.mit.edu --send-keys F3B988EE48D8C34C
gpg --keyserver keys.gnupg.net --send-keys F3B988EE48D8C34C
查看服务器上的公钥
gpg --keyserver pool.sks-keyservers.net --recv-keys F3B988EE48D8C34C
gpg --keyserver keyserver.ubuntu.com --recv-keys F3B988EE48D8C34C
gpg --keyserver pgp.mit.edu --recv-keys F3B988EE48D8C34C
gpg --keyserver keys.gnupg.net --recv-keys F3B988EE48D8C34C
2.3. setting.xml
maven库配置的setting.xml中进行如下配置:
//位置:apache-maven-3.5.0confsetting.xml
<servers>
<server>
<id>sonatype-nexus-snapshots</id>
<username>JDChain</username>
<password>xxx</password>
</server>
<server>
<id>sonatype-nexus-staging</id>
<username>JDChain</username>
<password>xxx</password>
</server>
<server>
<id>huaweicloud</id>
<username>anonymous</username>
<password>devcloud</password>
</server>
</servers>
<mirrors>
<mirror>
<id>huaweicloud</id>
<mirrorOf>*</mirrorOf>
<url>https://mirrors.huaweicloud.com/repository/maven/</url>
</mirror>
</mirrors>
2.4. pom.xml
//位置: prototypesourcepom.xml
//原先我们采用oss-parent的方式,现在去掉这个parent节点,直接将其参数配置写到pom.xml文件中,主要包含<profile>和<distributionManagement>节点;
<!--结尾添加如下内容-->
<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>
<scm>
<url>https://github.com/blockchain-jd-com/jdchain.git</url>
<connection>https://github.com/blockchain-jd-com/jdchain.git</connection>
<developerConnection>https://github.com/blockchain-jd-com/jdchain.git</developerConnection>
</scm>
<developers>
<developer>
<name>jdchain</name>
<email>git-jdchain@jd.com</email>
<url>https://github.com/blockchain-jd-com/jdchain.git</url>
</developer>
</developers>
<profiles>
<profile>
<id>disable-javadoc-doclint</id>
<activation>
<jdk>[1.8,)</jdk>
</activation>
<properties>
<javadoc.opts>-Xdoclint:none</javadoc.opts>
</properties>
</profile>
<!-- mvn repository;-->
<profile>
<id>sonatype-oss-release</id>
<build>
<plugins>
<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-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>2.10.4</version>
<executions>
<execution>
<id>attach-javadocs</id>
<goals>
<goal>jar</goal>
</goals>
<configuration>
<additionalparam>-Xdoclint:none</additionalparam>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-gpg-plugin</artifactId>
<version>1.1</version>
<executions>
<execution>
<id>sign-artifacts</id>
<phase>verify</phase>
<goals>
<goal>sign</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>
<distributionManagement>
<repository>
<id>sonatype-nexus-staging</id>
<name>Nexus Release Repository</name>
<url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
</repository>
</distributionManagement>
2.5. mvn发布
//在发布过程中,可能会提示签名sign之类的错误,这是由于GPG安装可能出现了问题,需要确保通过命令行的方式可以执行:gpg –version 。
//不执行单元测试,但是编译
mvn clean deploy -P sonatype-oss-release -Darguments="gpg.passphrase=xxx" -DskipTests=true
//不执行单元测试,也不编译
mvn clean deploy -P sonatype-oss-release -Darguments="gpg.passphrase=xxx" -Dmaven.test.skip=true
2.6. 正式发布
登录:https://oss.sonatype.org/#welcome,用户名:jdchain,登密:xxx。
按照下图点击1,然后在最下面应该会看到刚才发布的com.jd库(标记2)。选中此库后,在其Content中会显示所有相关的jar(标记3)。
如果确定无误,则点击close(标记4)。此时会进行各项正式发布前的校验工作,比如是否包含源码?是否包含javadoc?
如果校验通过,点击release(标记5)。则会同步到中心库。经过1-2个小时后,各中心库会展示相关信息。
![361fd7777e4ef8ebbdfa9565db6d0a5f.png](https://i-blog.csdnimg.cn/blog_migrate/6442e3925f4a8be935b62df4aa39fadf.jpeg)
2.7. 结果
2.7.1. maven.apache.org
https://repo.maven.apache.org/maven2/com/jd/blockchain/
![08456d05c04faf87076aded545649063.png](https://i-blog.csdnimg.cn/blog_migrate/34bb3780a372354589a6ffa08ebd4e55.jpeg)
2.7.2. mvnrepository
https://mvnrepository.com/search?q=com.jd.blockchain
![8bbb2836f9fe2d1dabd33dc5c0d20c10.png](https://i-blog.csdnimg.cn/blog_migrate/102b4531d423e688e16c6e23a518c82d.jpeg)
3. 其它
3.1. 忽略deploy
//skip=true,表示忽略;
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
3.2 sdk-pack
如果希望以一个独立jar的方式对外提供服务,可以全新构建一个sdk-pack项目,将sdk使用的所有jar进行打包,方便对用户提供灵活的服务。