Github Actions 自动发布 jar 包到 Maven 中央仓库
发布 jar 到中央仓库一直是一个相对繁琐且复杂的流程,特别是涉及到gpg密钥,以及之前不健全的 oss.sonatype.com 账号体系管理,网络上的各种教程也是复杂繁琐,并且经过几次迭代,sonatype以及于6月30日停用了旧的发布方式,完全使用 central.sonatype.com 来管理和发布,所以大部分网上的教程都已经过时
并且当你以前可以发布,但是最近突然不行了,报错401/403等等的错误,别怀疑,是之前的发布方式被废弃了,替换为新方式即可
一、事前准备
需要拥有gpg密钥,gpg如何申请不在本文篇章中,这个网络太多了且相对简单,只安装gpg,创建密钥串,将公钥发布到公网上,保存好自己的私钥和密码即可
之前使用过 oss.sonatype.com 的,一般使用原账号密码可以直接登录 central.sonatype.com ,新用户直接注册即可,有任何登录问题,都可发送邮箱 central-support@sonatype.com 请求帮助,官方答复还是很快的。
三、创建 Namespace
登录之后,访问 https://central.sonatype.com/publishing/namespaces ,若旧账户应该能看到自己原来的命名空间,即对应jar包的groupId,一般为域名倒置,例如 com.seepine
,也可以右上角创建新的命名空间,按照步骤验证即可。
四、生成UserToken
访问 https://central.sonatype.com/account ,第一个选项即 Generate User Token
,点击右边的按钮,会生成对应token,类似如下
1 2 3 4 5
| <server> <id>central</id> <username>JN**xm</username> <password>Mgmod*************************xhios</password> </server>
|
五、修改 pom.xml
官方教程地址为 https://central.sonatype.org/publish/publish-portal-maven/ 有兴趣或不理解的也可以查看官方文档,会繁琐一点但更加详细
将原来一堆的插件替换为如下,重点关注倒数那两个插件,其他都是次要,可能会与你原来项目的不同
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101
| <project>
<properties> <java.version>1.8</java.version> <encoding>UTF-8</encoding> <maven.compiler.source>${java.version}</maven.compiler.source> <maven.compiler.target>${java.version}</maven.compiler.target> <project.build.sourceEncoding>${encoding}</project.build.sourceEncoding> <project.reporting.outputEncoding>${encoding}</project.reporting.outputEncoding> </properties>
<dependencies> </dependencies>
<build>
<plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.11.0</version> <configuration> <source>${java.version}</source> <target>${java.version}</target> <encoding>${encoding}</encoding> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-source-plugin</artifactId> <version>3.2.1</version> <inherited>false</inherited> <executions> <execution> <phase>package</phase> <goals> <goal>jar-no-fork</goal> </goals> </execution> </executions> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-javadoc-plugin</artifactId> <version>3.3.0</version> <inherited>false</inherited> <configuration> <nohelp>true</nohelp> <charset>${encoding}</charset> <encoding>${encoding}</encoding> <docencoding>${encoding}</docencoding> </configuration> <executions> <execution> <phase>compile</phase> <goals> <goal>jar</goal> </goals> </execution> </executions> </plugin>
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-gpg-plugin</artifactId> <version>1.6</version> <inherited>false</inherited> <executions> <execution> <id>sign-artifacts</id> <phase>verify</phase> <goals> <goal>sign</goal> </goals> <configuration> <gpgArguments> <arg>--pinentry-mode</arg> <arg>loopback</arg> </gpgArguments> </configuration> </execution> </executions> </plugin> <plugin> <groupId>org.sonatype.central</groupId> <artifactId>central-publishing-maven-plugin</artifactId> <version>0.8.0</version> <extensions>true</extensions> <configuration> <publishingServerId>central</publishingServerId> <autoPublish>true</autoPublish> </configuration> </plugin>
</plugins> </build>
</project>
|
六、创建 github actions
根目录创建 .github/workflows/deploy.yml
文件,内容如下,若 jdk 版本不同请酌情修改
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| name: Maven Central Repo Deployment on: release: types: [ released ] jobs: publish-central: runs-on: ubuntu-latest steps:
- name: Checkout Git Repo uses: actions/checkout@v4
- name: Set up Apache Maven Central uses: actions/setup-java@v4 with: distribution: 'zulu' java-version: '8' server-id: central server-username: SERVER_USERNAME server-password: SERVER_PASSWORD gpg-private-key: ${{ secrets.GPG_SECRET }} gpg-passphrase: GPG_PASSPHRASE
- name: Publish to Apache Maven Central run: mvn deploy env: SERVER_USERNAME: ${{ secrets.SERVER_USERNAME }} SERVER_PASSWORD: ${{ secrets.SERVER_PASSWORD }} GPG_PASSPHRASE: ${{ secrets.GPG_PASSWORD }}
|
七、创建密钥
分别创建四个密钥,创建的入口以及创建后结果如图所示
- SERVER_USERNAME:生成的userToken中的username
- SERVER_PASSWORD:生成的userToken中的password
- GPG_SECRET:gpg 的私钥,—–BEGIN PGP PRIVATE KEY BLOCK—–开头那一大串
- GPG_PASSWORD:创建 gpg 密钥串时的密码

八、发布 jar 包
将修改后代码和 github actions yml文件这两个改动推送到 github 仓库
发布一个新版本(https://github.com///releases)
即可在 Actions 中查看到一个任务在执行,若任务执行错误,也可点击查看具体错误信息,当然按部就班的做,一般都会是成功

九、查看发布情况
在 https://central.sonatype.com/publishing/deployments 中,也可查看到一条状态为 PUBLISHING
的发布记录,看到则表示 central 已成功接收到了你的发布请求,待十来分钟当状态变为 PUBLISHED
,则表示你的 jar 包已经被同步到中央,此时其他人可引入你的依赖了
