当前位置: 首页 > article >正文

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 支持并跟上最新变化。
该插件内置了许多插件因此可以直接使用大部分功能

引入插件

plugins {id("com.vanniktech.maven.publish") version "0.30.0"
}

2.2 配置插件

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


val artifactId = "HeadlessChrome"
val groupId = "io.github.zimoyin"
val versionId = "1.0"
val descriptions = "Headless Chrome"val authorName = "zimoyin"
val developerId= authorNameval 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 = versionIdmavenPublishing {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.code.style=officialmavenCentralUsername=...
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

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

2.4 发布打包

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

相关文章:

Gradle 发布Jar到 Maven Central

1. 前置步骤 自 2024 年 3 月 12 日起&#xff0c;所有注册和发布都将通过 Central Portal 进行。 Central Portal 帐户注册命名空间可用于对工件进行签名的 GPG 密钥 1. 创建 GPG 密钥对 2. 分发公钥 更多教程参考本文: 如何发布jar包到maven中央仓库&#xff08;2024年3月最…...

小米6的ubantu touch 怎么安装docker

deekseek 真的太牛逼了。 小米6的ubantu touch 怎么安装docker&#xff1f; Thought for 19 seconds 嗯&#xff0c;用户问的是在小米6上安装Ubuntu Touch后如何安装Docker。首先&#xff0c;我需要确认Ubuntu Touch的版本是否支持Docker。Ubuntu Touch是基于Ubuntu的移动操作…...

USB子系统学习(四)使用libusb读取鼠标数据

文章目录 1、声明2、HID协议2.1、描述符2.2、鼠标数据格式 3、应用程序4、编译应用程序5、测试 1、声明 本文是在学习韦东山《驱动大全》USB子系统时&#xff0c;为梳理知识点和自己回看而记录&#xff0c;全部内容高度复制粘贴。 韦老师的《驱动大全》&#xff1a;商品详情 …...

深度剖析 Redisson 分布式锁:原理、实现与应用实践

文章目录 写在文章开头详解Redisson 分布式锁使用和实现前置准备工作分布式锁的基本使用公平锁的使用联锁的使用读写锁基本使用常见问题Redisson和Jedis有什么区别redisson如何实现分布式锁redisson如何实现分布式锁的可重入redisson如何实现公平锁Redisson的watchdog机制是什么…...

Android Studio 配置 Gerrit Code Review

很多大厂&#xff08;华为、荣耀&#xff09;的大型项目都有gerrit代码审查流程&#xff0c;那么我们如何实现不手动敲命令行&#xff0c;就在Android Studio中像平常开发一样&#xff0c;只需要用鼠标点点点&#xff0c;就能将代码推送到gerrit审查仓呢&#xff0c;现在就来跟…...

基于微信小程序的医院预约挂号系统的设计与实现

hello hello~ &#xff0c;这里是 code袁~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f981;作者简介&#xff1a;一名喜欢分享和记录学习的在校大学生…...

仅128个token达到ImageNet生成SOTA性能!MAETok:有效的扩散模型的关键是什么?(卡内基梅隆港大等)

论文链接&#xff1a;https://arxiv.org/pdf/2502.03444 项目链接&#xff1a;https://github.com/Hhhhhhao/continuous_tokenizer 亮点直击 理论与实验分析&#xff1a;通过实验和理论分析建立了潜空间结构与扩散模型性能之间的联系。揭示了具有更少高斯混合模型&#xff08;G…...

AWS成本优化实战:查询未关联弹性IP地址的完整指南

一、背景介绍 1.1 为什么要管理未关联的弹性IP 弹性IP (Elastic IP) 是AWS中的重要资源,但未关联的弹性IP会产生不必要的成本支出。主要问题包括: 闲置资源浪费持续产生费用增加运维成本影响资源管理效率1.2 解决方案价值 通过自动化脚本定期检查未关联的弹性IP: 及时发现…...

I2C协议—读写EEPROM(24Cxx为例)

STM32 I2C协议详解与应用实践-CSDN博客 实际项目中移植IIC协议及读写EEprom代码&#xff1a; /* AT24C08,写次数达100万次SOC ,2500次充放电次数&#xff0c;需要500万次记录&#xff0c;需存储均衡 每页*/#include "FreeRTOS.h" #include "task.h" #incl…...

示例:JAVA调用deepseek

近日&#xff0c;国产AI DeepSeek在中国、美国的科技圈受到广泛关注&#xff0c;甚至被认为是大模型行业的最大“黑马”。在外网&#xff0c;DeepSeek被不少人称为“神秘的东方力量”。1月27日&#xff0c;DeepSeek应用登顶苹果美国地区应用商店免费APP下载排行榜&#xff0c;在…...

Linux系统命令无法使用(glib库相关问题)

1.背景描述 Yum强制安装了一些软件&#xff0c;安装软件成功无报错&#xff0c;完成后不久突然发现系统出问题了&#xff0c;所有的命令无法使用了&#xff0c;如ls、mv、cat等基本命令报错。 relocation error&#xff1a; /lib64/libpthread.so.0: symbol_libc_dl_error_tsd …...

Java 一键将 Word 文档转为 PDF

嘿&#xff0c;朋友们&#xff01;在开发中&#xff0c;经常会碰到需要把 Word 文档转换成 PDF 格式的需求&#xff0c;像生成报告、合同啥的。Java 有不少好用的库能实现这个功能&#xff0c;下面就给大家介绍两种常见的方法&#xff0c;分别使用 Apache POI 和 Docx4J 结合 i…...

从基础到进阶:一文掌握排序、查找、动态规划与图算法的全面实现(C++代码实例解析)

引言 算法是计算机科学的核心&#xff0c;也是程序员解决复杂问题的利器。从基础的排序与查找到进阶的动态规划与图论算法&#xff0c;掌握这些技能不仅是提升编程能力的必经之路&#xff0c;更是解决实际问题的根本。本篇文章将通过 C 实现多个经典算法&#xff0c;包括排序、…...

Nginx反代Ollama接口跨域、无法逐字输出问题

场景 本地部署deepseek模型&#xff0c;用的Ollama管理&#xff0c;内网穿透到公网&#xff0c;在通过nginx反代ollama接口。 问题描述 跨域问题 nginx转发时请求头中需要加入origin&#xff0c;并且origin还要和ollama接口同源&#xff08;协议、ip、端口一致&#xff09;。…...

电脑黑屏按什么键恢复?电脑黑屏的解决办法

电脑黑屏的原因有很多&#xff0c;可能是硬件、软件、系统或者病毒等方面造成的。那么&#xff0c;当我们遇到电脑黑屏时&#xff0c;应该怎么做呢&#xff1f;有没有什么快捷的方法可以恢复正常呢&#xff1f;本文将为您介绍一些常见的电脑黑屏情况及其解决办法。 一、电脑开机…...

docker启动报错code=exited, status=1/FAILURE——问题排查

问题 在某台centos7机器上&#xff0c;启动docker服务 sudo systemctl start docker报下列错误&#xff1a; ● docker.service - Docker Application Container EngineLoaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)Active: …...

Kong故障转移参数配置

一、Passive Health Check Healthchecks.Passive.Unhealthy.HttpStatuses 含义&#xff1a; 列出了被认为是“不健康”的HTTP状态码。目的&#xff1a; 当健康检查&#xff08;Healthcheck&#xff09;返回这些状态码时&#xff0c;系统会认为服务不健康&#xff0c;并可能触…...

使用opencv解析视频,通过图片比对,筛选出每一帧视频的变化

记录瞬间 最近碰到一个问题&#xff0c;在客户端上操作时&#xff0c;存在背景判断的情况&#xff0c;对自动化实现此操作增加难度。 所以考虑到实际的使用&#xff0c;将一些计算机视觉技术加入到实际的使用中&#xff0c;来解决此问题。 import os import cv2 import numpy#…...

思翼遥控器疑问?

1.地面端与遥控端对频&#xff0c;地面端选择数传2为串口&#xff0c;天空端的UART2通过USB转TTL模块连接电脑&#xff0c;通过串口助手观察得有1Hz输出帧&#xff08;开启遥控器APP时间段为10Hz&#xff09;&#xff0c;共21字节&#xff0c;请问&#xff0c;这个是什么含义&a…...

anaconda中可以import cv2,但是notebook中cv2 module not found

一、问题 anaconda中成功import cv2 但是jupyter notebook中却无法导入cv2 二、排查 anaconda中使用python路径如下&#xff1a; jupyter notebook中使用python路径如下&#xff1a; 可以发现路径不一致。 三、解决 ①查看可用的kernel ②选中想要修改的kernel&#xff0c;打…...

如何解决 Linux 文件系统挂载失败的问题

当遇到Linux文件系统挂载失败的问题时&#xff0c;您可以通过以下步骤来解决问题&#xff1a; 解决方法&#xff1a; 检查挂载点&#xff1a; 确保要挂载的目标文件系统存在&#xff0c;并且挂载点是正确的。检查挂载点是否已经被其他文件系统占用。 检查文件系统状态&#x…...

PHP填表统计预约打卡表单系统小程序

&#x1f4cb; 填表统计预约打卡表单系统——专属定制&#xff0c;信息互动新纪元 &#x1f4ca; 填表统计预约打卡表单系统&#xff0c;一款专为现代快节奏生活量身打造的多元化自定义表单统计小程序&#xff0c;集信息填表、预约报名、签到打卡、活动通知、报名投票、班级统…...

PAT乙级( 1009 说反话 1010 一元多项式求导)C语言版本超详细解析

1009 说反话 给定一句英语&#xff0c;要求你编写程序&#xff0c;将句中所有单词的顺序颠倒输出。 输入格式&#xff1a; 测试输入包含一个测试用例&#xff0c;在一行内给出总长度不超过 80的字符串。字符串由若干单词和若干空格组成&#xff0c;其中单词是由英文字母&#x…...

LVSNAT服务搭建

LVSNAT实验环境搭建 在虚拟机上&#xff0c;我的NAT模式ip划分为&#xff1a;172.25.254.0 仅主机模式IP为&#xff1a;192.168.0.0 拓补图如下 配置服务&#xff1a;LVS服务端添加两个网卡&#xff0c;分别为NAT模式和仅主机模式 LVS服务端配置&#xff1a; systemctl st…...

websocket自动重连封装

websocket自动重连封装 前端代码封装 import { ref, onUnmounted } from vue;interface WebSocketOptions {url: string;protocols?: string | string[];reconnectTimeout?: number; }class WebSocketService {private ws: WebSocket | null null;private callbacks: { [k…...

2. Mellanox 网卡的参数调优-LINK_TYPE_P1(GPU-AI-大模型,底层调优-测试)

命令详细分析 echo yes | sudo mlxconfig -d $line set LINK_TYPE_P1=1 这个命令用于设置 Mellanox 网卡设备的 LINK_TYPE_P1 参数为 1。以下是该命令的详细解析: 各部分解释 echo yes |: 这个部分通过管道将字符串 yes 传递给后续命令,以自动确认任何需要用户输入确认的…...

apisix网关ip-restriction插件使用说明

ip-restriction插件可以在网关层进行客户端请求ip拦截。 当然了&#xff0c;一般不推荐使用该方法&#xff0c;专业的事专业工具做。建议有条件&#xff0c;还是上防火墙或者waf来做。 官方文档&#xff1a;ip-restriction | Apache APISIX -- Cloud-Native API Gateway whit…...

使用 Docker 和 PM2 构建高并发 Node.js API 网关

在现代 Web 开发中&#xff0c;构建高并发、高可用的 API 网关是一个常见的需求。本文将介绍如何结合 Docker 和 PM2 构建一个高性能的 Node.js API 网关&#xff0c;并深入探讨分布式限流器的原理与实现。 1. 背景与需求 1.1 高并发 API 网关的挑战 在高并发场景下&#xff…...

现代前端工程化实践:高效构建的秘密

一、前端工程化错误监控 这种监控可以帮助开发人员及时发现和解决问题&#xff0c;提高应用程序的稳定性和可靠性。 1. Sentry&#xff1a;Sentry是一款开源的错误监控平台&#xff0c;可以监控前端、后端以及移动端应用程序中的错误和异常。Sentry提供了实时错误报告、错误分…...

react高级面试题

以下是一些React高级面试题&#xff1a; 一、组件相关 React组件的生命周期有哪些&#xff08;类组件&#xff09;&#xff1f;在函数组件中如何实现类似功能&#xff1f; 答案&#xff1a; 类组件生命周期&#xff1a; componentDidMount&#xff1a;组件挂载后调用&#xff…...