发布至Maven中心仓库

使用eu.kakde.gradle.sonatype-maven-central-publisher:1.0.6,作为插件引入:

plugins {  
    id("java")  
    id("eu.kakde.gradle.sonatype-maven-central-publisher") version "1.0.6"  
}

定义项目信息:

val COMPONENT_TYPE = "java" // "java" or "versionCatalog"  
val GROUP: String = group.toString()  
val ARTIFACT_ID = rootProject.name  
val VERSION = version.toString()  
val PUBLISHING_TYPE = "AUTOMATIC" // USER_MANAGED or AUTOMATIC  
val SHA_ALGORITHMS = listOf("SHA-256", "SHA-512") // sha256 and sha512 are supported but not mandatory. Only sha1 is mandatory but it is supported by default.  
val DESC = "A swing framework to support i18n and auto-wired features"  
val LICENSE = "Apache-2.0"  
val LICENSE_URL = "https://opensource.org/licenses/Apache-2.0"  
val GITHUB_REPO = "evalexp/easy-swing.git"  
val DEVELOPER_ID = "evalexp"  
val DEVELOPER_NAME = "Zhou Hao"

从配置读取账户密码,这里的账户密码不是实际的账户密码,要生成一个User Token:

val sonatypeUsername: String? by project // this is defined in ~/.gradle/gradle.properties  
val sonatypePassword: String? by project // this is defined in ~/.gradle/gradle.properties

最后设置插件:

sonatypeCentralPublishExtension {  
    // Set group ID, artifact ID, version, and other publication details  
    groupId.set(GROUP)  
    artifactId.set(ARTIFACT_ID)  
    version.set(VERSION)  
    componentType.set(COMPONENT_TYPE) // "java" or "versionCatalog"  
    publishingType.set(PUBLISHING_TYPE) // USER_MANAGED or AUTOMATIC  
  
    // Set username and password for Sonatype repository    username.set(System.getenv("SONATYPE_USERNAME") ?: sonatypeUsername)  
    password.set(System.getenv("SONATYPE_PASSWORD") ?: sonatypePassword)  
  
    // Configure POM metadata  
    pom {  
        name.set(ARTIFACT_ID)  
        description.set(DESC)  
        url.set("https://github.com/${GITHUB_REPO}")  
        licenses {  
            license {  
                name.set(LICENSE)  
                url.set(LICENSE_URL)  
            }  
        }        
        developers {  
            developer {  
                id.set(DEVELOPER_ID)  
                name.set(DEVELOPER_NAME)  
            }  
        }        
        scm {  
            url.set("https://github.com/${GITHUB_REPO}")  
            connection.set("scm:git:https://github.com/${GITHUB_REPO}")  
            developerConnection.set("scm:git:https://github.com/${GITHUB_REPO}")  
        }  
        issueManagement {  
            system.set("GitHub")  
            url.set("https://github.com/${GITHUB_REPO}/issues")  
        }  
    }}

要注意,需要补充全局Gradle配置(~/.gradle/gradle.properties):

##############################
# GPG Credentials
# Last 8 characters in your GPG public key
signing.keyId=<ABCD1234>
# Your signing passphrase
signing.password=<passphrase>
# private key secring.gpg file path: /Users/jondoe/.gnupg/secring.gpg
signing.secretKeyRingFile=<secring path>
 
# sonatype credentials
sonatypeUsername=<username>
sonatypePassword=<password>
##############################

新版的GnuPG没有secring.gpg,要自己手动导出gpg --keyring secring.gpg --export-secret-keys > ~/.gnupg/secring.gpg

最后调用publish to sonatype central -> publishToSonatype任务即可。