手把手教你如何将项目发布到Maven中央仓库(附步骤及常见问题解决方法)

手把手教你如何将项目发布到Maven中央仓库(附步骤及常见问题解决方法)

业余时间写了个轻量级的权限控制框架 light-security ,并发布到了 Maven 中央仓库。发布时的操作步骤还挺多,我这个记性是记不住的,所以记录一下,便于以后查阅,也希望对大家有帮助。

一、Sonartype相关准备工作

  • 前往 https://issues.sonatype.org/ 注册账号,并记好账号和密码,后面有用

  • 前往 https://issues.sonatype.org/secure/Dashboard.jspa ,点击导航栏上的 Create 按钮,并按提示填写项目信息:

    Create Issue

    个人为项目 light-security-spring-boot-starter 填写的信息如 https://issues.sonatype.org/browse/OSSRH-47914 所示,供大家参考。

  • 创建 Issue 后,等待审核即可。一般会在一个工作日内审核完成。当Issue的Status变为RESOLVEDFIXED 后,即可进行下一步操作

二、GPG相关准备工作

2.1 安装GPG

Mac安装GPG:

brew install gpg

Ubuntu安装GPG:

sudo apt-get install gnupg

2.2 GPG常用命令

gpg --version 检查安装成功没
gpg --gen-key 生成密钥对
gpg --list-keys 查看公钥
gpg --keyserver 服务器地址 --send-keys 公钥ID 将公钥发布到 PGP 密钥服务器
gpg --keyserver 服务器地址 --recv-keys 公钥ID 查询公钥是否发布成功

2.3 生成秘钥

gpg --gen-key
按照提示输入姓名/邮箱,然后按O即可生成。

如果遇到问题,可详见”遇到的问题一节”。

2.4 查看本地秘钥

gpg --list-keys

结果类似如下:

➜  ~ gpg --list-keys
/Users/itmuch.com/.gnupg/pubring.kbx
------------------------------------
pub   rsa2048 2019-04-20 [SC] [有效至:2021-04-19][xxxxxxxxx]
uid           [ 绝对 ] itmuch.com <eacdy0000@126.com>
sub   rsa2048 2019-04-20 [E] [有效至:2021-04-19]

三、配置Maven

TIPS

可参考官方文档配置 https://central.sonatype.org/pages/apache-maven.html

1 修改项目的pom.xml,添加如下内容:

<licenses><license><name>The Apache Software License, Version 2.0</name><url>http://www.apache.org/licenses/LICENSE-2.0.txt</url></license>
</licenses><developers><developer><name>itmuch</name><email>eacdy0000@126.com</email><url>https://github.com/eacdy</url></developer>
</developers><scm><url>https://github.com/eacdy/light-security</url><connection>https://github.com/eacdy/light-security.git</connection><developerConnection>https://github.com/eacdy</developerConnection>
</scm><distributionManagement><snapshotRepository><id>ossrh</id><url>https://oss.sonatype.org/content/repositories/snapshots</url></snapshotRepository><repository><id>ossrh</id><url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url></repository>
</distributionManagement><profiles><profile><id>release</id><build><plugins><plugin><groupId>org.sonatype.plugins</groupId><artifactId>nexus-staging-maven-plugin</artifactId><version>1.6.7</version><extensions>true</extensions><configuration><serverId>ossrh</serverId><nexusUrl>https://oss.sonatype.org/</nexusUrl><autoReleaseAfterClose>true</autoReleaseAfterClose></configuration></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-release-plugin</artifactId><version>2.5</version><configuration><autoVersionSubmodules>true</autoVersionSubmodules><useReleaseProfile>false</useReleaseProfile><releaseProfiles>release</releaseProfiles><goals>deploy</goals></configuration></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-source-plugin</artifactId><version>2.2.1</version><executions><execution><id>attach-sources</id><goals><goal>jar-no-fork</goal></goals></execution></executions></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-javadoc-plugin</artifactId><version>2.9.1</version><executions><execution><id>attach-javadocs</id><goals><goal>jar</goal></goals></execution></executions></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-gpg-plugin</artifactId><version>1.5</version><executions><execution><id>sign-artifacts</id><phase>verify</phase><goals><goal>sign</goal></goals></execution></executions></plugin></plugins></build></profile>
</profiles>

可参考我的配置:https://github.com/eacdy/light-security/blob/master/light-security-spring-boot-starter/pom.xml

2 修改 $MAVEN_HOME/conf/settings.xml 文件(即你的Maven配置文件),添加如下内容:

<server><!-- 这里的ID要和distributionManagement.repository.id一致 --><id>ossrh</id><!-- https://issues.sonatype.org/的账号 --><username>账号</username><!-- https://issues.sonatype.org/的密码 --><password>密码</password>
</server>

四、修改项目版本

用如下命令,修改项目的版本,例如1.0.1-RELEASE

mvn versions:set -DnewVersion=1.0.1-RELEASE

当然也可手动修改版本,不过当项目比较复杂,module比较多时,手动修改就会比较麻烦,而且容易出错。建议用命令修改。

五、发布

执行如下命令即可将依赖发布到中央仓库。

mvn clean install deploy -P release

不出意外,构建会报xxx服务器无法找到GPG的异常。原因是前文生成的秘钥尚未发布到key server。keyserver的地址会在异常中打印出来。我的项目报的是 http://keys.gnupg.net:11371/ 。于是执行

gpg --keyserver  http://keys.gnupg.net:11371/ --send-keys [xxxxxxxxx]
其中的[xxxxxxxxx],可用gpg --list-keys显示出来。

然后再次执行如下命令:

mvn clean install deploy -P release

此时即可发布成功。发布完使用如下命令重置为SNAPSHOT版本

mvn versions:set -DnewVersion=1.0.2-SNAPHOST

六、遇到的问题

6.1 执行 gpg --gen-keyKey generation failed: Timeout 的异常

解决方案:

rm -rf ~/.gnupg
gpg --gen-key

6.2 执行mvn clean install deploy -P release 时,报gpg: signing failed: Inappropriate ioctl for device

原因是当前终端无法弹出密码输入页面。

解决方案:

export GPG_TTY=$(tty)
mvn clean install deploy -P release

6.3 连不上 https://oss.sonatype.org

  • 科学上网(在某些城市有被查水表、罚款的风险),自己找梯子吧;
  • 飞到香港、澳门或者海外等能没有墙的地方,然后发布应用,发布完再回国(一种人傻钱多的方式);
  • 移民(更彻底的解决方案,但如果想看抗日神剧或者听某些国内音乐,可能要用梯子翻回来)……

TIPS

如果你在发布时遇到其他问题,也可添加我的微信 jumping_me ,我尽量帮助到你。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/662703.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C++】 C++入门— 基于范围的 for 循环

C 基于范围的for循环1 使用样例2 使用条件3 完善措施 Thanks♪(&#xff65;ω&#xff65;)&#xff89;谢谢阅读&#xff01;下一篇文章见&#xff01;&#xff01;&#xff01; 基于范围的for循环 1 使用样例 使用for循环遍历数组&#xff0c;我们通常这么写&#xff1a; …

3D打印、自动升降超静电机驱动方案TMC2209

TMC2209步进电机驱动芯片介绍 TMC2209是一款用于两相步进电机的超静音电机驱动IC。Trinamic的精密StealthChop波器确保了无噪音运行、最大效率和最佳电机转矩。它的快速电流调节和与SpreadCycle的可选组合允许高度动态运动&#xff0c;同时为无传感器归位添加了StallGuard4。集…

python中的可变与不可变、深拷贝和浅拷贝

个人猜想&#xff08;很遗憾失败了&#xff09; 在硬盘或者系统中存在一个字符集 如果存在硬盘中&#xff0c;那么硬盘出厂的时候他的字符集所占用的空间就已经确定了。 如果存在于系统的话&#xff0c;硬盘应该在出厂的时候为系统设置一个存储系统字符集的地方。在安装系统…

L1-019 谁先倒分数 15

划拳是古老中国酒文化的一个有趣的组成部分。酒桌上两人划拳的方法为&#xff1a;每人口中喊出一个数字&#xff0c;同时用手比划出一个数字。如果谁比划出的数字正好等于两人喊出的数字之和&#xff0c;谁就输了&#xff0c;输家罚一杯酒。两人同赢或两人同输则继续下一轮&…

2024/2/4周报

文章目录 摘要Abstract文献阅读题目引言创新点方法利用长短期记忆网络学习时空演化特征构建用于气象辅助信息编码的堆叠自编码器使用多任务学习发现全市通用模式 模型实验数据集评估准则实验结果 深度学习Self-attentionself-Attention由来self-attention原理self attention代码…

【ArcGIS微课1000例】0100:ArcGIS for CAD软件下载与安装(附安装包)

ArcGIS for CAD软件下载与安装(附安装包)。 文章目录 一、ArcGIS for CAD概述1. ArcGIS for CAD介绍2. 主要功能二、ArcGIS for CAD下载三、ArcGIS for CAD安装1. 安装CAD2. 安装ArcGIS for CAD3. 配置一、ArcGIS for CAD概述 1. ArcGIS for CAD介绍 ArcGIS for CAD是Esri提…

《拳皇97》中的人物性格——陈可汗

在热血沸腾、高手如云的《拳皇97》世界里,有一位壮硕威猛却自带喜感的角色引人注目,他就是我们的重量级选手——陈可汗。这位来自中国的摔跤手以其独特的性格特质和生动活泼的表现方式,在激烈的格斗赛场上描绘出了一幅既令人捧腹又充满力量的画面。 陈可汗甫一登场,那魁梧的…

Acwing---2816. 判断子序列

判断子序列 1.题目2.基本思想3.代码实现 1.题目 给定一个长度为 n n n 的整数序列 a 1 , a 2 , … , a n a1,a2,…,an a1,a2,…,an 以及一个长度为 m m m 的整数序列 b 1 , b 2 , … , b m b1,b2,…,bm b1,b2,…,bm。 请你判断 a a a序列是否为 b b b序列的子序列。 子…

解锁影视制作新境界:DaVinci Resolve Studio 18引领行业变革

随着科技的不断发展&#xff0c;影视制作行业也在日新月异地变革。在这一进程中&#xff0c;DaVinci Resolve Studio 18以其卓越的性能和无限的创新力&#xff0c;成为了行业的领跑者。 DaVinci Resolve Studio 18是一款集剪辑、调色、音频处理和特效合成于一身的专业级影视制…

CICD注册和使用gitlab-runner常见问题

1、现象 fatal: unable to access https://github.com/homebrew/brew/: 2、解决 git config --global --unset http.proxy git config --global --unset https.proxy 查看gitlab-runner是否成功&#xff1a; userusers-MacBook-Pro ~ % gitlab-runner -h 查看gitlab-run…

openssl3.2 - 帮助文档的整理

文章目录 openssl3.2 - 帮助文档的整理概述笔记整理后, 非空的文件夹如下整理后, 留下的有点用的文件列表如下备注END openssl3.2 - 帮助文档的整理 概述 openssl3.2源码工程编译安装完, 对于库的使用者, 有用的文档, 远不止安装的那些html. 用everything查找, 配合手工删除,…

使用python-pandas对比两个结构相同的文件差异,并输出差集文件的方法

最近在处理数据相关需求&#xff0c;遇到一个问题&#xff1a;两个文件&#xff0c;fileA.csv和fileB.csv&#xff0c;结构相同&#xff0c;fileA包含fileB的内容&#xff0c;但是需要得到二者的差集&#xff0c;输出新的文件fileC。 经过查询资料&#xff0c;发现pandas可以很…

康姿百德床垫价格合理功效好,用科技力量守护您的睡眠健康

现代生活中&#xff0c;优质睡眠的观念已深入人心。人们渐渐认识到&#xff0c;一个舒适的床垫不仅仅是睡眠的工具&#xff0c;更是健康的守护者。很多朋友在选购床垫一掷千金&#xff0c;却找不到一款合适的床垫。康姿百德床垫是专为提升睡眠质量研发的床垫&#xff0c;成为了…

保姆级教程:从0到1搭建web自动化测试环境

之前都是在linux上安装&#xff0c;第一次在windows上配置环境&#xff0c;加上距离上次配置环境有点久了&#xff0c;竟也花了点时间。特此记录下保姆级教程&#xff0c;给初学者一个有效的参考&#xff01; 一. 环境搭建 工具清单 工具工具名版本Java开发工具包JDK1.8浏览…

面试手写第五期

文章目录 一. 实现一个函数用来对 URL 的 querystring 进行编码二. 如何实现一个数组洗牌函数 shuffle三. 异步加法的几种方式四. 实现trim函数五. 求多个数组的交集六. 手写实现render函数七. 驼峰转- -转驼峰八. instanceof实现九. 组合问题十. 字符串分组 一. 实现一个函数用…

Linux 命令 —— top

Linux 命令 —— top 相对于 ps 是选取一个时间点的进程状态&#xff0c;top 则可以持续检测进程运行的状态。使用方式如下&#xff1a; 用法&#xff1a; top [-d secs] | [-p pid] 选项与参数&#xff1a; -d secs&#xff1a;整个进程界面更新 secs 秒。默认是 5 5 5 秒。…

用函数求最小公倍数和最大公约数(c++题解)

题目描述 输入两个正整数m和n&#xff0c;求其最大公约数和最小公倍数。 提示&#xff0c;求最大公约数用一个函数实现。本题求最大公约数必须用高效算法&#xff0c;如辗转相除法&#xff0c;朴素算法要超时。 输入格式 第1行&#xff1a;两个非整数&#xff0c;值在0&…

C++之平衡二叉搜索树查找

个人主页&#xff1a;[PingdiGuo_guo] 收录专栏&#xff1a;[C干货专栏] 大家好&#xff0c;我是PingdiGuo&#xff0c;今天我们来学习平衡二叉搜索树查找。 目录 1.什么是二叉树 2.什么是二叉搜索树 3.什么是平衡二叉搜索树查找 4.如何使用平衡二叉搜索树查找 5.平衡二叉…

导出文件响应头Content-Disposition值直接填写中文字符失效处理

问题 在做导出数据为excel文件的时候&#xff0c;定义http请求的响应头如下所示 response.setHeader(“Content-Disposition”, “attachment;filename” fileName “.xls”); 当filename为中文则会失效。 原因 filename字符编码的问题&#xff0c;需要将其编码为utf-8格式…

一个好看的底部导航栏效果

<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>底部导航栏</title> </head> <style&…