打包Github的项目为Jar包并上传到Maven中央仓库


0

打包Github的项目为Jar包并上传到Maven中央仓库

创建sonatype帐号

访问System Dashboard - Sonatype JIRA,点击Sign up按钮创建账号。

创建issue并完成审核

按提示创建完账号后登录,点击主页上面的新建按钮新建issue:
01.jpg
然后按提示填写issue描述,其中项目路径等信息填写为我们项目所在的Github路径,groupId填写为我们的Github的groupId(例如com.github.xxxxxx):
02.jpg
填写完成后点击新建,issue就创建完成并自动跳转到该issue详情页面,issue状态为开放,等待一小时左右人工审核完成之后,会修改issue状态为Waiting for Response并自动在issue的评论下面发送一条回复:
03.jpg
即要求你在Github按照指定仓库名创建一个public的仓库证明该Github仓库所属人是你自己:
14.jpg
按照提示创建完成后,点击issue详情页上面的Respond按钮完成Github所属人验证(忘记截图了,按钮大概位置如图所示):
04.jpg
之后issue状态会变成开放,并再次进行人工审核,在等待一小时左右之后,会收到另一条回复:
05.jpg
即上传代码的提示和提醒你上传完成后在此评论表示已完成。

修改maven及项目配置并打包上传到Maven中央仓库

使用gpg生成密钥并上传到公共密钥库

gpg4win网站下载并安装gpg4win,安装完成后最好重启电脑使gpg命令生效。
在powershell运行gpg --gen-key命令,并依次填写信息,确认弹出输入密钥密码的确认框:
06.jpg
再次确认后会打印出密钥信息:
07.jpg
将密钥上传到公共密钥库,gpg --keyserver hkp://keyserver.ubuntu.com:11371 --send-keys xxxxxxxx
08.jpg

修改maven的配置文件settings.xml

注意修改的setting.xml文件必须和自己IntelliJ IDEA的maven配置中保持一致。
修改自己的settings.xml文件,在servers标签内添加自己的sonatype帐号密码:

<server>
<id>oss</id>
<!--sonatype帐号-->
<username>xxxxxxxx</username>
<!--sonatype密码-->
<password>xxxxxxxx</password>
</server>

在profiles标签内添加gpg密钥信息:

<profile>
<id>oss</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<!--gpg命令-->
<gpg.executable>gpg</gpg.executable>
<!--gpg密钥密码-->
<gpg.passphrase>xxxxxxxx</gpg.passphrase>
</properties>
</profile>

修改项目配置文件pom.xml

clone Github的项目到本地并在pom.xml添加如下配置:

  <!--省略-->

<name>com.github.liuzhuoming23:pinyin4j-spring-boot-starter</name>
<description>A Spring Boot Starter of https://github.com/belerweb/pinyin4j.</description>
<url>https://github.com/liuzhuoming23/pinyin4j-spring-boot-starter</url>

<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>liuzhuoming23</name>
<email>416561115@qq.com</email>
<organization>liuzhuoming23</organization>
<url>https://github.com/liuzhuoming23/pinyin4j-spring-boot-starter</url>
</developer>
</developers>

<scm>
<connection>scm:git:git@github.com:liuzhuoming23/pinyin4j-spring-boot-starter.git</connection>
<developerConnection>scm:git:git@github.com:liuzhuoming23/pinyin4j-spring-boot-starter.git
</developerConnection>
<url>https://github.com/liuzhuoming23/pinyin4j-spring-boot-starter</url>
<tag>0.0.1</tag>
</scm>

<distributionManagement>
<snapshotRepository>
<id>oss</id>
<name>OSS Snapshots Repository</name>
<url>https://oss.sonatype.org/content/repositories/snapshots</url>
</snapshotRepository>
<repository>
<id>oss</id>
<name>OSS Staging Repository</name>
<url>https://oss.sonatype.org/service/local/staging/deploy/maven2</url>
</repository>
</distributionManagement>

<profiles>
<profile>
<id>release</id>
<build>
<plugins>
<!--源码打包插件-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>3.1.0</version>
<executions>
<execution>
<id>attach-sources</id>
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
<!--javadoc打包插件-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>3.1.0</version>
<configuration>
<encoding>UTF-8</encoding>
<charset>UTF-8</charset>
<docencoding>UTF-8</docencoding>
<!--忽略doclint限制-->
<doclint>none</doclint>
</configuration>
<executions>
<execution>
<id>attach-javadocs</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
<!--gpg打包插件-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-gpg-plugin</artifactId>
<version>1.5</version>
<executions>
<execution>
<id>sign-artifacts</id>
<phase>verify</phase>
<goals>
<goal>sign</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>

<properties>
<java.version>1.8</java.version>
</properties>

<dependencies>
<!--省略-->
</dependencies>
<build>
<plugins>
<!--自动closed及release插件-->
<plugin>
<groupId>org.sonatype.plugins</groupId>
<artifactId>nexus-staging-maven-plugin</artifactId>
<version>1.6.8</version>
<extensions>true</extensions>
<configuration>
<serverId>oss</serverId>
<nexusUrl>https://oss.sonatype.org/</nexusUrl>
<autoReleaseAfterClose>true</autoReleaseAfterClose>
</configuration>
</plugin>
</plugins>
</build>
</project>

打包并上传到Maven仓库

在上传之前先去https://oss.sonatype.org/#stagingRepositories,找到并Drop/discard所有自己提交但是报错的项目,否则可能导致上传失败。
在IntelliJ IDEA的Maven ToolBar里找到运行输入框,并运行mvn clean deploy -P release
09.jpg
10.jpg
在某个时刻会要求手动输入密钥密码,然后IDEA的console会打印各种打包日志等到出现如下图的日志时,说明打包和上传成功了:
11.jpg
按照issue评论里的提醒,点击下面的备注按钮在issue评论里回复已完成,又是大概一小时左右会收到一条评论告诉你项目已同步到中央仓库,并且在若干时间后可以从Maven中央仓库引用此依赖,并且issue状态也变成了已解决
12.jpg
至此,打包Github的项目为Jar包并上传到Maven中央仓库的流程已完成。
几分钟后可以在https://oss.sonatype.org/#nexus-search搜索自己的依赖名称,会发现依赖已经上传成功了。
13.jpg
两小时左右后可以在https://search.maven.org搜索自己的依赖名称,会发现依赖已经同步成功了。
15.jpg

更新Maven中央仓库代码版本

直接修改代码并修改项目version,然后运行mvn clean deploy -P release等待上传完成即更新代码版本成功(这次就快多了)。

参考来源

  1. Apache Maven