废话少说,先说几个网址:
- Sonatype
- Gradle
- GitHub
这篇文章就从零开始,应用 Gradle 7 将 Java 类库公布到 Maven 核心仓库,并应用GitHub Action实现公布 release 时主动推送。
注册 sonatype
这个不用说了吧,关上https://issues.sonatype.org/注册一个账号就行了
公布 issue
注册当前登录 Sonatype,公布一条 issue
Summary
:轻易填填就行了,反正我填的是我的项目名。Group Id
:填写类库的Group Id
,留神如果为独立域名,对方会要求验证域名所有权(验证TXT
记录),对方收到 Issue 后会揭示你增加的。Project URL
:填我的项目网址,或者 GitHub 地址。SCM url
:如果我的项目放 GitHub 上,就填 GitHub 地址加上.git
就这样提交就行了,缓缓期待回复(品上面那张图,半小时都不到就能够了!)
你会看到上面这个没有啥用的回复:
批改build.gradle
配置文件
注 1:我应用的 Gradle 版本为最新的 7.1.1,其余版本请自行尝试。
注 2:我的 Gradle 配置文件为 Groovy 版的,Kotlin DSL 版请自行转换。
首先在plugins
中增加maven-publish
和signing
插件,
plugins { id 'maven-publish' id 'signing'}
而后在配置文件最初增加以下内容:
java { withJavadocJar() withSourcesJar()}javadoc { options.addStringOption("charset", "UTF-8") if (JavaVersion.current().isJava9Compatible()) { options.addBooleanOption('html5', true) }}publishing { publications { mavenJava(MavenPublication) { artifactId = '构件名称' from components.java pom { name = '我的项目名' description = '我的项目形容' url = '我的项目URL' licenses { license { name = '许可证名称' url = '许可证地址' } } developers { developer { id = '开发者ID' name = '开发者名' email = '开发者邮箱' } } scm { connection = 'scm:git:git://github.com/path/to/repo.git' developerConnection = 'scm:git:ssh://github.com/path/to/repo.git' url = 'https://github.com/path/to/repo' } } } } repositories { maven { name = "OSSRH" if (project.version.toString().endsWith("-SNAPSHOT")) { url = "https://s01.oss.sonatype.org/content/repositories/snapshots" } else { url = "https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/" } credentials { username = findProperty("ossrhUsername") ?: System.getenv("OSSRH_USERNAME") password = findProperty("ossrhPassword") ?: System.getenv("OSSRH_PASSWORD") } } }}signing { sign(publishing.publications.mavenJava)}
次要内容为:
- 生成 JavadocJar
- 生成 SourcesJar
- 将 Javadoc 设置为 UTF-8 编码
- 对公布服务器的设置
- 签名
创立密钥
对于 Windows 零碎,可通过Chocolatey
或Scoop
装置gpg4win
对于 macOS 零碎,能够通过Homebrew
装置gpg
brew install gpg
对于 Linux 零碎,可通过包管理工具装置gnupg
工具
sudo apt install gnupg # Debian 系sudo yum install gnupg # RedHat 系
装置实现后,能够通过gpg --generate-key
创立密钥,留神记住设置的明码。
创立实现,输出gpg -k
查看生成的密钥,你会看到以下内容:
pub rsa3072 2021-07-25 [SC] [expires: 2023-07-25] A36DDCA2B4E3D244AA685BC6C2F673BC0FEB0227uid [ultimate] TestTest <example@example.com>sub rsa3072 2021-07-25 [E] [expires: 2023-07-25]
当初确定几个名词,本文的前面会用到:
A36DDCA2B4E3D244AA685BC6C2F673BC0FEB0227
为密钥指纹
密钥指纹
的最初 8 位(0FEB0227
)为KEYID
当初导出KeyRingFile
gpg --export-secret-keys [密钥指纹] > secret.gpg
将[密钥指纹]
替换为你的理论值,他将会在当前目录下生成secret.gpg
文件,保留备用。
当初将secret.gpg
进行BASE64
解决,Windows 零碎倡议在Git Bash
中执行:
base64 secret.gpg > secret.gpg.base64
当初将公钥上传到公钥服务器(Sonatype 会在多个服务器上查找公钥,例如keys.gnupg.net
、pool.sks-keyservers.net
、keyserver.ubuntu.com
),如果一个服务器无奈上传能够尝试另外两个。
gpg --keyserver keyserver.ubuntu.com --send-keys [密钥指纹]
「最初一步」 GitHub Action!
先创立如下文件,文件名随便
name: Publish package to the Maven Central Repositoryon: release: types: [created]jobs: publish: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Set up JDK 11 uses: actions/setup-java@v2 with: java-version: "11" distribution: "adopt" - name: Grant execute permission for gradlew run: chmod +x gradlew - name: Build with Gradle run: ./gradlew build - name: Decode run: | echo "${{secrets.SIGNING_SECRET_KEY_RING_FILE}}" > ~/.gradle/secring.gpg.base64 base64 -d ~/.gradle/secring.gpg.base64 > ~/.gradle/secring.gpg - name: Publish package run: gradle publish -Psigning.keyId=${{secrets.SIGNING_KEY_ID}} -Psigning.password=${{secrets.SIGNING_KEY_PASSWORD}} -Psigning.secretKeyRingFile=$(echo ~/.gradle/secring.gpg) env: OSSRH_USERNAME: ${{ secrets.OSSRH_USERNAME }} OSSRH_PASSWORD: ${{ secrets.OSSRH_PASSWORD }}
创立如下 Secrets:
其中:
OSSRH_USERNAME
:你 Sonatype 的用户名OSSRH_PASSWORD
:你 Sonatype 的明码SIGNING_KEY_ID
:下面提到的KEYID
,8 位的SIGNING_KEY_PASSWORD
:设置的私钥明码SIGNING_SECRET_KEY_RING_FILE
:secret.gpg.base64
中的内容
完结撒花
在 GitHub 上公布 release,关上https://s01.oss.sonatype.org/,点击左侧Staging Repositories
,你将看到方才公布的 release 呈现在列表中。
确认无误后,能够选中,点击Close
,如果胜利,点击Release
,即可公布类库到 Maven 核心仓库。