Appearance
发布库到 Maven Central
前提条件
- 在 issues.sonatype.org 注册账号并申请 groupId
- 生成 GPG 密钥对
bash
# 生成 GPG 密钥
gpg --gen-key
# 查看密钥
gpg --list-keys
# 上传公钥到服务器
gpg --keyserver keyserver.ubuntu.com --send-keys YOUR_KEY_ID
# 导出密钥(用于 CI)
gpg --export-secret-keys YOUR_KEY_ID | base64build.gradle.kts
kotlin
plugins {
`java-library`
`maven-publish`
signing
}
group = "com.example"
version = "1.0.0"
java {
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
withSourcesJar()
withJavadocJar()
}
publishing {
publications {
create<MavenPublication>("mavenJava") {
from(components["java"])
pom {
name.set("My Library")
description.set("A great library for doing things")
url.set("https://github.com/example/my-library")
licenses {
license {
name.set("The Apache License, Version 2.0")
url.set("https://www.apache.org/licenses/LICENSE-2.0.txt")
}
}
developers {
developer {
id.set("johndoe")
name.set("John Doe")
email.set("john@example.com")
}
}
scm {
connection.set("scm:git:git://github.com/example/my-library.git")
developerConnection.set("scm:git:ssh://github.com/example/my-library.git")
url.set("https://github.com/example/my-library/tree/main")
}
}
}
}
repositories {
maven {
name = "OSSRH"
url = uri(
if (version.toString().endsWith("SNAPSHOT"))
"https://s01.oss.sonatype.org/content/repositories/snapshots/"
else
"https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/"
)
credentials {
username = providers.gradleProperty("ossrhUsername").orNull
password = providers.gradleProperty("ossrhPassword").orNull
}
}
}
}
signing {
val signingKey: String? by project
val signingPassword: String? by project
useInMemoryPgpKeys(signingKey, signingPassword)
sign(publishing.publications["mavenJava"])
}
// 仅在发布时才签名
tasks.withType<Sign> {
onlyIf { !version.toString().endsWith("SNAPSHOT") }
}~/.gradle/gradle.properties(本地配置)
properties
ossrhUsername=your-sonatype-username
ossrhPassword=your-sonatype-password
signing.keyId=ABCDEF12
signing.password=your-gpg-password
signing.secretKeyRingFile=/home/you/.gnupg/secring.gpgGitHub Actions 发布
yaml
name: Publish to Maven Central
on:
release:
types: [created]
jobs:
publish:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-java@v4
with:
java-version: '11'
distribution: 'temurin'
- uses: gradle/actions/setup-gradle@v3
- name: Publish
run: ./gradlew publish
env:
OSSRH_USERNAME: ${{ secrets.OSSRH_USERNAME }}
OSSRH_PASSWORD: ${{ secrets.OSSRH_PASSWORD }}
SIGNING_KEY: ${{ secrets.GPG_PRIVATE_KEY }}
SIGNING_PASSWORD: ${{ secrets.GPG_PASSPHRASE }}
- name: Release staging repository
run: ./gradlew closeAndReleaseSonatypeStagingRepository发布步骤
bash
# 1. 发布到 OSSRH Staging
./gradlew publish
# 2. 登录 oss.sonatype.org
# 3. 在 Staging Repositories 中找到你的仓库
# 4. Close → Release(等待同步到 Maven Central,约 10-30 分钟)
# 或者使用插件自动化
./gradlew closeAndReleaseSonatypeStagingRepository