Appearance
发布到 Maven 仓库
maven-publish 插件
kotlin
plugins {
`java-library`
`maven-publish`
}
java {
withSourcesJar()
withJavadocJar()
}
publishing {
publications {
create<MavenPublication>("mavenJava") {
from(components["java"])
// 覆盖 POM 信息(可选)
groupId = "com.example"
artifactId = "my-library"
version = "1.0.0"
pom {
name.set("My Library")
description.set("A concise description of my library")
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 {
// 发布到本地 ~/.m2 仓库
mavenLocal()
// 发布到私有 Nexus/Artifactory
maven {
name = "snapshots"
url = uri("https://nexus.example.com/repository/maven-snapshots/")
credentials {
username = providers.gradleProperty("nexusUsername").orNull
password = providers.gradleProperty("nexusPassword").orNull
}
}
maven {
name = "releases"
url = uri("https://nexus.example.com/repository/maven-releases/")
credentials {
username = providers.gradleProperty("nexusUsername").orNull
password = providers.gradleProperty("nexusPassword").orNull
}
}
}
}发布命令
bash
# 发布到本地 Maven 仓库(~/.m2)
./gradlew publishToMavenLocal
# 发布到所有配置的仓库
./gradlew publish
# 发布到特定仓库
./gradlew publishMavenJavaPublicationToSnapshotsRepository
./gradlew publishMavenJavaPublicationToReleasesRepository发布到 Maven Central(OSSRH)
kotlin
plugins {
`java-library`
`maven-publish`
signing
}
// 签名配置(Maven Central 要求)
signing {
sign(publishing.publications["mavenJava"])
// 从 gradle.properties 读取 GPG 配置
// signing.keyId=ABCDEF12
// signing.password=your-key-password
// signing.secretKeyRingFile=/path/to/secring.gpg
// 或者使用内存中的 GPG key
val signingKey: String? by project
val signingPassword: String? by project
useInMemoryPgpKeys(signingKey, signingPassword)
}
publishing {
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
}
}
}
}下一步
- 发布到 Ivy 仓库 - Ivy 仓库发布
- 多项目构建基础 - 多模块项目管理