最近在写一些开源项目,想把自己写的东西放到maven中央仓库,供更多人使用。所以写这篇文章来记录下自研开源项目jar包成功上传同步maven中央仓库的全过程。这里面还是有很多坑的。[TOC]首先需要在sonatypeJIRA管理平台上完成新项目的申请。审核通过后,就可以上传jar操作了。上传过程首先要在本地打包。为了保证项目信息的完整性和上传过程的安全性,需要进行特殊操作,在后面详细介绍本地打包后,先转入sonatypeNexus暂存库。此库仅用于临时存储。验证内容完整、资料齐全后,可通过平台运营转入发布库。将开源项目jar调入发布库后,我们需要操作的内容就真正完成了。sonatypemaven库中的项目会自动同步到maven中央仓库。这个过程会有延迟,但是延迟很短。如果使用国内maven中央仓库的镜像,用maven中央仓库会有比较大的延迟。请耐心等待同步后才能使用。1.注册OSSRH账号配置sonatype是社区支持的开源项目托管服务(OpenSourceProjectRepositoryHosting,简称OSSRH)。它是免费的,开发者可以在这里托管自己开源项目生成的mavenjar包。这里maven项目打包部署后,会自动同步到maven中央仓库。所以无论如何,我们都需要先注册一个sonatype平台账号。1.1.账号注册注册地址:https://issues.sonatype.org/s...!default.jspa,按照下图所示内容填写邮箱,全名,登录用户名username,登录密码passwprd,填写验证码完成注册。友情提示:注册过程中对密码强度要求很高。填好后,最好先找个记事本记下密码,以免以后使用时忘记。另外,注册完成后,并没有“注册成功”的相关提示,而是直接跳转到登录界面。使用我们刚刚注册的用户登录,登录后会提示我们选择语言:我习惯中文,当然选择中文;然后我们会被提示选择头像;然后会提示我们要做什么工作,“只需浏览当前项目”,这一步不重要。进入JIRA管理平台后,点击顶部导航栏的“新建”按钮,然后在弹出的模态框中填写信息,如下:项目和问题类型,一定要选对,并且根据图中的操作概要填写项目名称。GroupId根据项目的maven坐标按需填写,与maven项目的pom配置一致。(这里注意:实际操作时,先看下面的《1.2.域名认证》,再做这个操作,有对应关系,避免出错)代码上传到github后,项目url,scm版本管理url(和.git)如图填写。单击新建以创建新问题。实际上是启动一个新项目审核的审核工作流程,有人会审核你填写的信息。1.2.域名验证因为我上面填写的GroupID是我自己购买的域名,所以需要证明这个域名是我的。证明的方式也很简单,就是在我购买域名的平台上为域名添加一条txt域名解析记录,在流程审核中会给出域名解析记录的值JIRA平台的结果记录,如下图红框所示(本次新项目申请编号:OSSRH-83481)。如果我没有域名怎么办?如果没有域名,GroupId可以填写github用户域,如:com.github.。填写github用户域,验证方式不同。你需要在github中创建一个空仓库。仓库的名称是OSSRH-83481。因为我的域名是在阿里云上买的,所以去阿里云给域名添加了一个TXT类型的解析记录值。如果您不确定TXT解析记录值是否有效,您可以使用windowsCMD命令行响应以下信息来证明设置正确>nslookup-type=TXT您的域名服务器:dns.google地址:8.8.8.8非权威回答:你的域名text="OSSRH-83481"域名解析记录值添加后,返回sonatypeJIRA管理平台。在OSSRH-83481问题中,如下图,有一个Respose按钮。点击该按钮即表示您已完成域名认证操作。(因为我这篇文章是在操作完成后写的,所以这个按钮没有了,我模拟了一个)在整个新问题和项目流程审核过程中,你的注册邮箱会持续收到sonatypeJIRA管理平台发送的邮件提醒你审查过程到了什么阶段。(这个审稿过程很快,应该是机器人审稿,不是人工操作,我用了5分钟就完成了整个审稿过程)。审核通过后,您将看到以下状态:已解决。2.安装GnuPG软件并生成签名新项目通过后,我们需要在开发PC上安装GnuPG,因为我们上传到sonatypemaven库的所有文件都必须经过GnuPG签名,而没有签名的文件无法上传成功。下载地址:https://gpg4win.org/thanks-fo...。下载完成后,直接点击“Next”、“Next”进行安装。下载完成后,我们打开WindowsCMD命令行,执行以下命令。(注意:我的操作都是在CMD命令行下进行的,不要用powershell,不要用gitbash。我都试过了,也不是不可以,只是操作过程不一致,如果和我的操作不一致process,可能会导致你操作失败!)gpg--gen-key下图中红色部分是我填写的内容,我的名字,email,还有一个O表示ok。系统会提示我们输入密码短语并填写两次。这个Passphrase是密码,一定要记住,后面会用到。生成GnuPG签名的公私钥对后,可以使用如下命令查看结果C:\Users\hanxt>gpg--list-keygpg:checkingthetrustdbgpg:marginalsneeded:3completesneeded:1信任模型:pgpgpg:深度:0有效:1签名:0信任:0-、0q、0n、0m、0f、1ugpg:下一次trustdb检查到期时间为2024-08-09C:\Users\hanxt\AppData\Roaming\gnupg\pubring.kbx------------------------------------------------pubed255192022-08-10[SC][过期时间:2024-08-09]6B4F6A477A1BE195326AEAFA0EE41461FB92CD0Buid[最终]HanXiaotongsubcv255192022-08-10:04-10[E8][02-expires09]密钥对生成完成后,将其公钥发送到sonatype认可的keyserver。公钥的字符串可以通过上面的gpg--list-key查看gpg--keyserverkeyserver.ubuntu.com--send-keys6B4F6A477A1BE195326AEAFA0EE41461FB92CD0B通过下面的命令行可以验证公钥的字符串是否发送成功到服务器。gpg--keyserverkeyserver.ubuntu.com--recv-keys6B4F6A477A1BE195326AEAFA0EE41461FB92CD0B三、项目基本配置完成以上准备工作后,我们需要对项目进行打包。我用的打包工具是maven。您需要检查以下信息是否配置完整,如果不完整,请添加!如果没有这些信息,maven项目将无法在以后转换为发布状态。请根据您项目的实际情况填写。com.zimugzimug-monitor-threadpool<版本>1.0${project.groupId}:${project.artifactId}springbootstarterforthreadpoolmonitorhttps://github.com/hanxt/zimug-monitor-threadpoollicense中填写开源协议,填写git项目在scm中的代码仓库地址,developer填写开发者的联系方式。BSD3-Clausehttps://spdx.org/licenses/BSD-3-Clause.html<连接>https://github.com/hanxt/zimug-monitor-threadpool.githttps://github.com/hanxt/zimug-monitor-threadpoolzimughanxiaotongtong@163.comDeveloper+8四、maven打包配置只有在sonatypeJIRA管理平台上注册的用户才能将开源项目jar上传到sonatypeNexus仓库。所以我们在上传jar文件的时候,需要将我们注册的用户名和密码告知服务器。找到maven的setting.xml,添加如下配置:ossrhsonatype注册用户名sonatype注册用户密码setting.xml是maven的全局配置。另外,需要为项目配置pom.xml。首先配置远程仓库的地址。需要注意的是这里的id必须和setting.xml中服务器配置的id一致。ossrhhttps://s01.oss.sonatype.org/content/repositories/snapshotsossrhhttps://s01.oss.sonatype.org/service/local/staging/deploy/maven2/这里有几点需要注意,snapshotRepository是项目快照版本的上传地址。如果项目的版本号,比如:1.0-SNAPSHOT,就会上传到这个仓库。通常repository就是我们真正需要发布项目的远程仓库的上传地址。需要注意的是,我们这里写的是staging暂存地址,不是release版本的地址。(为什么要这样做,后面会详细介绍。)另外需要注意的是,我们上传的远程仓库地址是有s01前缀的,而老文章是没有s01前缀的。这是因为老的sonatypemaven仓库已经资源加载满了,所以正式新建了一个s01maven仓库,以后可能还有s02和s03。现阶段在sonatypeJIRA管理平台注册的用户只能上传这个新的s01仓库。远程仓库配置完成后,我们还需要在项目pom.xml中添加一些打包配置。这些配置基本不用修改,原样粘贴进去即可。(maven-gpg-plugin插件会调用上面安装的GnuPG软件对文件进行签名)releaseorg.apache.maven.pluginsmaven-source-plugin2.2.1packagejar-no-forkorg.apache.maven.pluginsmaven-javadoc-plugin2.9.1priv吃trueUTF-8UTF-8UTF-8-Xdoclint:nonepackagejarorg.apache.maven.pluginsmaven-gpg-plugin<版本>1.6版本><执行><执行>验证signorg.apache.maven.pluginsmaven-compiler-plugin3.01.81.8truetrueUTF-8org.apache.maven.pluginsmaven-release-plugin2.5.1在项目的根目录下,运行如下命令进行maven打包操作(同时deploytheprojectjartoRemotemavenwarehouse),打包运行过程中会弹出对话框提示输入密钥(Passphrase),输入你在上面《安装GnuPG软件,并生成签名》章节mvncleaninstalldeploy中填写的Passphrase-Prelease这里需要注意的是:不要使用IDEA的mavenUI进行打包。IDEA打包的mavenUI会报错,无法执行gpg命令。至于具体原因,我还没想好,直接用上面的CMD命令行打包就可以了。使用mvn命令行打包时,需要注意你的JAVA_HOME环境变量是否指向你期望的版本。我的电脑安装了多个版本的JDK,JAVA_HOME指向JDK11,我要打包的版本是JDK8。混淆的可能性!如果mavendepoly下命令报401认证错误,是因为你的mavensetting.xml的服务器配置的用户名和密码错误,或者setting.xml的服务器配置id和配置的repositoryid不一致pom。也有可能是你电脑上有多个版本的maven,项目中没有使用同一个setting.xml。如果报400错误,很可能你上传的同版本的jar又被上传了。5.CLOSE&RELEASE工程jar正确上传到nexus仓库后,我们需要进行进一步的操作。这是因为我们上传的jar放到了staging暂存库中,需要转入release库。Sonatype平台会对你的项目信息、jar文件、源码等进行完整性校验,校验不通过的项目无法转入release,也无法同步到maven中央仓库。这些操作都需要通过界面进行,使用sonatype注册用户登录:https://s01.oss.sonatype.org/。如图,如果我们的项目打包上传成功,我们会在StagingRepository中看到一个Repository,查看一下。点击“关闭”按钮后,会自动进行完整性校验,校验结果可通过双击仓库所在行查看。(只要按照上面的内容在pom中填写项目信息和打包配置,到这里基本就可以通过验证了)CLOSE验证通过后,多次刷新页面,Release按钮就可以点击了。此时点击Release按钮,将项目jar从Staging暂存库转移到Release官方库中。其实需要我们操作的内容都已经完成了。sonatypemaven库中的项目会自动同步到maven中央仓库,可以通过maven坐标导入使用。别担心,这个过程可能会有一些延迟。上传后可能一段时间内在maven中央仓库搜索不到,但是使用maven坐标下载jar包是没有问题的。一切ok后,最好回到sonatypeJIRA管理平台,关闭“issue”,这样sonatypeJIRA管理流程就全部完成了。欢迎关注我的公告号:字母哥杂谈,回复003送作者专栏《docker修炼之道》30余篇优质docker文章PDF版。Antetokounmpo博客:zimug.com