Gradle 将 Java 类库发布到 Maven 中心仓库
废话少说,先说几个网址:
- Sonatype
- Gradle
- GitHub
注册 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 编码
- 对发布服务器的设置
- 签名
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
查看生成的密钥,你会看到以下内容:pubrsa3072 2021-07-25 [SC] [expires: 2023-07-25]
A36DDCA2B4E3D244AA685BC6C2F673BC0FEB0227
uid[ultimate] TestTest
subrsa3072 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 Repository
on:
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 }}
【Gradle 将 Java 类库发布到 Maven 中心仓库】创建如下 Secrets:
文章图片
其中:
OSSRH_USERNAME
:你 Sonatype 的用户名OSSRH_PASSWORD
:你 Sonatype 的密码SIGNING_KEY_ID
:上面提到的KEYID
,8 位的SIGNING_KEY_PASSWORD
:设置的私钥密码SIGNING_SECRET_KEY_RING_FILE
:secret.gpg.base64
中的内容
Staging Repositories
,你将看到刚才发布的 release 出现在列表中。确认无误后,可以选中,点击
Close
,如果成功,点击Release
,即可发布类库到 Maven 中心仓库。推荐阅读
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- 即将到手三百万
- 事件代理
- 思友人
- Java|Java OpenCV图像处理之SIFT角点检测详解
- java中如何实现重建二叉树
- 数组常用方法一
- 【Hadoop踩雷】Mac下安装Hadoop3以及Java版本问题
- 20210307《挑战赛怂人胆》【能量将帅挑战赛(01)】
- Java|Java基础——数组