从零开始上传开源项目到Maven中央仓库
目錄
- 介紹
- 簡(jiǎn)單講解一下上傳到Maven中央倉(cāng)庫(kù)流程
- Maven(sonatype)賬號(hào)準(zhǔn)備
- 1.注冊(cè)Sonatype JIRA賬號(hào)
- 2.創(chuàng)建工單
- 3.驗(yàn)證GroupId
- 基于域名驗(yàn)證
- 基于開(kāi)源倉(cāng)庫(kù)的驗(yàn)證
- 4.流轉(zhuǎn)工單狀態(tài)
- 5.工單處理完成
- 6.登錄nexus repository manager
- 7.nexus repository manager平臺(tái)生成User Token
- Maven項(xiàng)目打包并上傳流程
- 打包簡(jiǎn)要配置說(shuō)明
- 1.工程pom.xml配置
- pom項(xiàng)目基本信息
- maven中snapshot與release版區(qū)別
- 配置分發(fā)管理
- pom打包插件配置
- 2.Gpg 簽名工具安裝與使用
- 下載
- 生成秘鑰
- 3.配置~/.m2/setting.xml
- 4.打包-部署
- 最后流程
- 坑總結(jié)
- 中央倉(cāng)庫(kù)無(wú)法找到我的包
- https://oss.sonatype.org與https://s01.oss.sonatype.org
- 心得
介紹
第一次比較正式的開(kāi)源的自己的項(xiàng)目,心里還是很激動(dòng)的,于是迫不及待的想要上傳到Maven中央倉(cāng)庫(kù),方便使用者引用。本教程將會(huì)從零開(kāi)始講解,但是由于時(shí)效的變化,在每個(gè)過(guò)程還是需要讀者本身自己思考如何處理遇到問(wèn)題。
簡(jiǎn)單講解一下上傳到Maven中央倉(cāng)庫(kù)流程
Maven(sonatype)賬號(hào)準(zhǔn)備
1.注冊(cè)Sonatype JIRA賬號(hào)
https://issues.sonatype.org/secure/Signup!default.jspa這個(gè)連接便是注冊(cè)地址,下方是圖片
按照提示注冊(cè)即可,沒(méi)有什么需要說(shuō)的,唯一需要說(shuō)的就是賬號(hào)密碼記錄清楚,畢竟這個(gè)不常用。注冊(cè)完成后就登錄
2.創(chuàng)建工單
點(diǎn)擊下方的Create按鈕,界面風(fēng)格可能在以后有變動(dòng),但是大體意思很明確,那就是找到創(chuàng)建工單的地方
Proejct選擇(Community Support - Open Source Project Repository Hosting (OSSRH)),這里面選項(xiàng)很多,我們選的這個(gè)選項(xiàng)意思就是(社區(qū)支持的開(kāi)源項(xiàng)目托管庫(kù)OSSRH-我們就可以理解為這就是Maven私服倉(cāng)庫(kù))
根據(jù)下方的表格提示填入內(nèi)容,這里說(shuō)明一下
- Summary就是你的項(xiàng)目名
- Description選填
- GroupId(這個(gè)是最重要的,后臺(tái)管理員審核的也是這個(gè),往下看會(huì)專(zhuān)門(mén)介紹GroupId如何寫(xiě),當(dāng)然這個(gè)在創(chuàng)建成功后也可以改)
- Project URL 你的項(xiàng)目官網(wǎng)或者git地址都可以的
- SCM url 你的開(kāi)源倉(cāng)庫(kù)地址,比如github,gitee等等
- username 你的牛逼名稱(chēng)
3.驗(yàn)證GroupId
由于我都已經(jīng)把所有流程創(chuàng)建好了,所以我只能根據(jù)工單的變化日志來(lái)寫(xiě)教程了。最開(kāi)始我的GroupId是org.pettyfox.timeline
上圖大概意思是說(shuō)你是否擁有pettyfox.org,本來(lái)想去買(mǎi)個(gè).org域名的但是遺憾的發(fā)現(xiàn),目前國(guó)內(nèi)買(mǎi)不了,因此我便更改GroupId為com.pettyfox.timeline,在之前我是擁有pettyfox.com域名的,
基于域名驗(yàn)證
Do you own the domain pettyfox.org? If so, please verify ownership via one of the following methods:Add a TXT record to your DNS referencing this JIRA ticket: OSSRH-71087 (Fastest) https://central.sonatype.org/faq/how-to-set-txt-record/ Setup a redirect to your https://github.com/mathcoder23 page (if it does not already exist)大體意思就是在域名的根解析中加一個(gè)TXT類(lèi)型的解析,并且內(nèi)容是OSSRH-71087這里你的根據(jù)你自己的OSSRH-xxx來(lái)更改,這個(gè)域名操作應(yīng)該很簡(jiǎn)單吧,我就不貼步驟了。這樣做的目的很簡(jiǎn)單,就驗(yàn)證你是否是這個(gè)域名的擁有者。
關(guān)于域名與GroupId的關(guān)系:如果我們擁有域名 比如opensource.com,那么GroupId必須是com.opensource開(kāi)頭,后面怎么寫(xiě)不重要.
基于開(kāi)源倉(cāng)庫(kù)的驗(yàn)證
有時(shí)候我們沒(méi)有域名,并且也不想去買(mǎi),那么我們可以通過(guò)開(kāi)源倉(cāng)庫(kù)的平臺(tái)來(lái)驗(yàn)證,比如GitHub、GitLab、Gitee、Bitbucket、SourceForge
下面是官方的引導(dǎo)教程
首先你可以進(jìn)入 https://central.sonatype.org/publish/requirements/coordinates/查看詳細(xì)的步驟。
下面是GroupId與項(xiàng)目名稱(chēng)的對(duì)應(yīng)關(guān)系,安裝對(duì)應(yīng)的教程來(lái)操作即可
最關(guān)鍵的一步應(yīng)該就是創(chuàng)建一個(gè)公開(kāi)倉(cāng)庫(kù)名為OSSRH-xxx或者在github的pages網(wǎng)頁(yè)中創(chuàng)建OSSRH-xxx
GroupId的驗(yàn)證基本上就是這樣,其中最關(guān)鍵的還是根據(jù)管理員推送的GroupId驗(yàn)證指導(dǎo)來(lái),仔細(xì)閱讀他說(shuō)的內(nèi)容即可,這才是最好的方案,因?yàn)檫@些流程隨時(shí)可能會(huì)更新、廢棄等等。
4.流轉(zhuǎn)工單狀態(tài)
這一步的作用就是告訴管理員我們的準(zhǔn)備做好了,你幫我處理一下。
我這里已經(jīng)是RESOLVED了,你們的應(yīng)該是OPEN,我忘記在哪里點(diǎn)了,反正在紅框中找到某個(gè)按鈕將狀態(tài)改為:WAITING FOR RESPOSE即等待響應(yīng)
變更OPEN為等待響應(yīng)狀態(tài)
5.工單處理完成
如果一切順利,大約幾分鐘就會(huì)有結(jié)果,結(jié)果如下,最終的工單狀態(tài)會(huì)變成RESOLVED
第一行的變更組名不過(guò)在意,下方的消息就是告訴我已經(jīng)驗(yàn)證我是com.pettyfox的擁有者,
告訴我的Maven私服管理地址是https://s01.oss.sonatype.org這里需要注意的是你的地址到底是哪個(gè)需要根據(jù)評(píng)論的內(nèi)容來(lái),因?yàn)樵谝郧笆莖ss.sonatype.org,我的內(nèi)容如下
上面的文字就是告訴我們Maven倉(cāng)庫(kù)地址,以及快照地址、正式版地址
這里要注意一個(gè)坑,Please comment on this ticket when you've released your first component(s), so we can activate the sync to Maven Central.這里說(shuō)了一句你必須評(píng)論一次(最下方Comment發(fā)一條內(nèi)容),才能激活組件同步到中央倉(cāng)庫(kù)
6.登錄nexus repository manager
由上述官方回復(fù)的內(nèi)容可知,我們的nexus repository manager地址是https://s01.oss.sonatype.org,并且賬號(hào)密碼與Sonatype JIRA的賬號(hào)密碼相同
登錄后頁(yè)面如下
為了后續(xù)方便maven打包上傳驗(yàn)證,我們申請(qǐng)基于Token的方式驗(yàn)證
7.nexus repository manager平臺(tái)生成User Token
此步驟可以在后面打包上傳時(shí)來(lái)完成,可以跳過(guò)
在后臺(tái)右上角點(diǎn)擊用戶名后,點(diǎn)擊Profile
選擇下方下拉框,選中User Token
按照提示創(chuàng)建一個(gè)User Token即可,并且保存
現(xiàn)在關(guān)于賬號(hào)的準(zhǔn)備我們已經(jīng)全部完成
Maven項(xiàng)目打包并上傳流程
這里說(shuō)明一下,其實(shí)官方引導(dǎo)的文檔已經(jīng)說(shuō)的很清楚了下面我貼一下地址,可以參考
- https://central.sonatype.org/publish/publish-maven/
打包簡(jiǎn)要配置說(shuō)明
1.工程pom.xml配置
一下的pom是指工程下的pom.xml
pom項(xiàng)目基本信息
<name>timeline-mq</name> <description>A message queue for timeline. core is redis stream</description> <url>https://github.com/mathcoder23/timeline-mq</url> <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>Petty Fox</name><email>mathcoder23@126.com</email><url>https://github.com/mathcoder23</url></developer> </developers><scm><url>https://github.com/mathcoder23/timeline-mq</url><connection>https://github.com/mathcoder23/timeline-mq.git</connection><developerConnection>https://github.com/mathcoder23/timeline-mq</developerConnection></scm>這一步配置按照理解填寫(xiě)即可
maven中snapshot與release版區(qū)別
在maven版本管理中,將jar包劃分為兩個(gè)重要的版本一個(gè)是快照版、一個(gè)是正式版,快照版意味著可能頻繁的更新、變動(dòng),因此maven同步時(shí)每次都要去拉
配置分發(fā)管理
<distributionManagement><snapshotRepository><id>ossrh</id><url>https://s01.oss.sonatype.org/content/repositories/snapshots</url></snapshotRepository><repository><id>ossrh</id><url>https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/</url></repository></distributionManagement>這里需要注意一下,你的私服地址與我的是否一樣很重要,你需要去看工單中官方給你回復(fù)的指導(dǎo)文檔中地址是多少才是多少
pom打包插件配置
<build><plugins><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><configuration><tags><tag><name>date</name></tag></tags></configuration></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><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://s01.oss.sonatype.org/</nexusUrl><autoReleaseAfterClose>false</autoReleaseAfterClose></configuration></plugin></plugins></build>建議上述的pom代碼不要不思考的復(fù)制粘貼,一定要想它的作用是什么,跟你的環(huán)境是否一致
2.Gpg 簽名工具安裝與使用
下載
https://www.gnupg.org/download/安裝提示下載即可,然后自行安裝。安裝完成后重啟命令行,應(yīng)該便會(huì)有g(shù)pg命令
生成秘鑰
指定命令 gpg --gen-key,按照提示填入相應(yīng)信息
maven-gpg-plugin插件應(yīng)該會(huì)讀取Gpg的密鑰信息
3.配置~/.m2/setting.xml
下面配置用于在打包后上傳的認(rèn)證
這里的賬號(hào)密碼可以是上述教程生成的User Token也可以是登錄密碼,
需要注意server下的id必須與pom.xml中定義的一致
4.打包-部署
mvn clean package
執(zhí)行此命令后,就會(huì)開(kāi)始打包,在過(guò)程中會(huì)提示輸入Gpg的密鑰密碼。
最后流程
完成打包命令后,我們登錄https://s01.oss.sonatype.org/
一般我們發(fā)布的包,在Staging Repositories,需要經(jīng)歷Close檢測(cè),然后在Release,但是有些會(huì)自動(dòng)完成的。假如你發(fā)現(xiàn)Staging Repositories有你提交的包,那么你需要Close一下,然后Release,否則你直接在此倉(cāng)庫(kù)中搜索就可以搜索到的。
如下圖
上述完成后我們搜索組件
至此,我們便成功了
坑總結(jié)
中央倉(cāng)庫(kù)無(wú)法找到我的包
看下方紅框的內(nèi)容,意思是你需要評(píng)論一下這個(gè)工單,才會(huì)激活將私倉(cāng)同步到中央倉(cāng)庫(kù)的行為。
最后我們點(diǎn)擊左下角的Comment評(píng)論過(guò)后,高興的收到成功的回復(fù)了。大概意思就是說(shuō),已經(jīng)給我開(kāi)啟了同步任務(wù),在https://repo1.maven.org/maven2/可以拉到組件的時(shí)間通常在半個(gè)小時(shí),在https://search.maven.org可搜索到通常在4個(gè)小時(shí)。
https://oss.sonatype.org與https://s01.oss.sonatype.org
在以前的一下教程中,是使用oss這個(gè)二級(jí)域名,但是2021年二月開(kāi)始,使用s01這個(gè)三級(jí)域名
從這個(gè)三級(jí)域名來(lái)看,后面不保證不會(huì)出現(xiàn)s02、s03這樣的地址所以自己看自己對(duì)應(yīng)的文檔才是最重要的
心得
本教程只能給你一些在流程、注意事項(xiàng)的引導(dǎo),由于文檔的變化與發(fā)展,任何時(shí)候,我們應(yīng)該將官方文檔作為首要參考,其他的博客內(nèi)容包含本博客應(yīng)該是次要參考。sonatype回復(fù)的指導(dǎo)流程已經(jīng)非常詳細(xì)了。認(rèn)真理解表達(dá)的內(nèi)容也是避坑的途徑。
總結(jié)
以上是生活随笔為你收集整理的从零开始上传开源项目到Maven中央仓库的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: IPNC_RDK_McFW_UserGu
- 下一篇: 【认证须知】什么是HCIE?为什么要考?