Gradle 发布Jar到 Maven Central

1. 前置步骤

自 2024 年 3 月 12 日起,所有注册和发布都将通过 Central Portal 进行。

  1. Central Portal 帐户
  2. 注册命名空间
  3. 可用于对工件进行签名的 GPG 密钥
    1. 创建 GPG 密钥对
    2. 分发公钥

更多教程参考本文: 如何发布jar包到maven中央仓库(2024年3月最新版保姆级教程)

如果遇到命名空间无法创建请参阅这篇文章: 记一次从 Legacy OSSRH 到 Central Portal 进行迁移

2. 配置插件

截至到当前为止 Gradle 并没有任何官方插件用于发布 Jar 到Maven。故而这里选择一款开源插件用来帮助我们来实现

2.1 com.vanniktech.maven.publish

Gradle 插件可创建一项publish任务,自动将所有 Java、Kotlin 或 Android 库上传到任何 Maven 实例。此插件基于Chris Banes 的初始实现 ,并进行了增强以添加 Kotlin 支持并跟上最新变化。

该插件内置了许多插件因此可以直接使用大部分功能

引入插件

kotlin 复制代码
plugins {
    id("com.vanniktech.maven.publish") version "0.30.0"
}

2.2 配置插件

这里直接复制我的配置即可,所有的变量都是可以改变的。

kotlin 复制代码
val artifactId = "HeadlessChrome"
val groupId = "io.github.zimoyin"
val versionId = "1.0"
val descriptions = "Headless Chrome"

val authorName = "zimoyin"
val developerId= authorName

val gitRepoName = artifactId
val gitUri = "github.com/${authorName}"
val emails = "tianxuanzimo@qq.com"

val license = "The Apache License, Version 2.0"
val licenseUrl = "https://www.apache.org/licenses/LICENSE-2.0.txt"

description = descriptions
group = groupId
version = versionId

mavenPublishing {
    publishToMavenCentral(SonatypeHost.CENTRAL_PORTAL)

    signAllPublications()

    if (!project.hasProperty("mavenCentralUsername")) {
        throw IllegalArgumentException("mavenCentralUsername is not set")
    } else if (!project.hasProperty("mavenCentralPassword")) {
        throw IllegalArgumentException("mavenCentralPassword is not set")
    } else if (!project.hasProperty("signing.keyId")) {
        throw IllegalArgumentException("signing.keyId is not set")
    } else if (!project.hasProperty("signing.password")) {
        throw IllegalArgumentException("signing.password is not set")
    }

    coordinates(groupId, artifactId, versionId)

    pom {
        name.set(artifactId)
        description.set(descriptions)
        inceptionYear.set("2025")
        url.set("https://$gitUri/$gitRepoName/")
        licenses {
            license {
                name.set(license)
                url.set(licenseUrl)
                distribution.set(licenseUrl)
            }
        }
        developers {
            developer {
                id.set(developerId)
                name.set(authorName)
                email.set(emails)
                url.set("https://$gitUri")
            }
        }
        scm {
            url.set(gitRepoName)
            connection.set("scm:git:git://$gitUri/$gitRepoName.git")
            developerConnection.set("scm:git:ssh://git@$gitUri/$gitRepoName.git")
        }
    }
}

2.3 配置密钥

在项目根目录下 build.gradle.kts 旁边有个 gradle.properties 我们需要在里面配置密钥,但是注意不要将gradle.properties 进行版本托管,否则可能会泄露

kotlin 复制代码
kotlin.code.style=official

mavenCentralUsername=...
mavenCentralPassword=...
signing.keyId=5F82D2CD
signing.password=...
signing.secretKeyRingFile=private.bin

依次解释这个几个配置

  • mavenCentralUsername:在 central 中通过Generate User Token 生成的令牌中的 name字段
  • mavenCentralPassword:在 central 中通过Generate User Token 生成的令牌中的 password字段

如果你通过 Generate User Token生成后就会的到这个配置,这个配置的内容就是你所需要的 name,pasdword。

如果你不知道我在说什么请重新查阅阶段一的详细教程,是另外一个博主的文章: 如何发布jar包到maven中央仓库(2024年3月最新版保姆级教程)
或者你在 central 网站中找到 你的头像(主页)---> View Account ---> Generate User Token

xml 复制代码
<server>
   <id>...</id>
   <username>...</username>
   <password>...</password>
</server>
  • signing.keyId : 是你公钥ID的后八位
  • signing.password: 密码,不多说
  • signing.secretKeyRingFile:私钥二进制文件
    关于如何生成私钥二进制文件,请使用以下命令
sh 复制代码
gpg --export-secret-keys -o private.bin [公钥ID后八位]

2.4 发布打包

IDEA 里面找到 publishing-->publishAllPublicationsToMavenCentralRepository,运行它即可

相关推荐
Boilermaker19926 小时前
[Java 并发编程] Synchronized 锁升级
java·开发语言
Cherry的跨界思维7 小时前
28、AI测试环境搭建与全栈工具实战:从本地到云平台的完整指南
java·人工智能·vue3·ai测试·ai全栈·测试全栈·ai测试全栈
alonewolf_997 小时前
JDK17新特性全面解析:从语法革新到模块化革命
java·开发语言·jvm·jdk
一嘴一个橘子7 小时前
spring-aop 的 基础使用(啥是增强类、切点、切面)- 2
java
sheji34167 小时前
【开题答辩全过程】以 中医药文化科普系统为例,包含答辩的问题和答案
java
恋爱绝缘体18 小时前
2020重学C++重构你的C++知识体系
java·开发语言·c++·算法·junit
wszy18098 小时前
新文章标签:让用户一眼发现最新内容
java·python·harmonyos
wszy18098 小时前
顶部标题栏的设计与实现:让用户知道自己在哪
java·python·react native·harmonyos
程序员小假9 小时前
我们来说一下无锁队列 Disruptor 的原理
java·后端
资生算法程序员_畅想家_剑魔9 小时前
Kotlin常见技术分享-02-相对于Java 的核心优势-协程
java·开发语言·kotlin