一步一步將項目推送到maven中央倉庫

原文:https://gitee.com/wl4g/xcloud-blogs/blob/master/articles/deploy-maven-central/README_CN.md

一步一步將項目推送到maven中央倉庫

最近工作比較空閑梆暖,做了一些實用小工具倡缠,在本地直接引用jar包實在是不方便,所以研究了一下如何將項目推送到maven中央倉庫逊朽。怕日后遺忘嘉涌,所以寫這篇文章記錄一下,也方便朋友們借鑒决侈。

一史飞、將代碼上傳到托管平臺

這一步不必多說猫妙,想必大家都知道瓷翻,git,碼云吐咳,bitbucket都可以逻悠。

二、使用sonatype創(chuàng)建工單

非首次推送可忽略韭脊,同一groupId只有第一次較繁瑣需提交工單童谒,第二次之后推送無需再生成gpg秘鑰了,直接到 第四步沪羔。

進入sonatype網(wǎng)站:https://issues.sonatype.org創(chuàng)建賬號饥伊。

完成之后可以在頁面頂部看到如下畫面
[圖片上傳失敗...(image-2c249f-1609900373388)]

項目選擇:Community Support - Open Source Project Repository Hosting (OSSRH)

問題類型選擇:New Project

概要:對要發(fā)布的項目作一個簡單的描述象浑。

描述選填可以不寫。

group id:即將要發(fā)布的maven項目的group id琅豆。

Project Url:是項目所在地址愉豺。

SCM URL:clone項目的地址。

username(s):就是你在該網(wǎng)站注冊的用戶名茫因。

Already Synced to Centra:是否準備好同步到中央倉庫蚪拦,選擇yes的話則會覆蓋之前的構建。

填寫完成后點擊新建冻押,然后等待審核驰贷。

如果你使用的是自己的域名,管理員會回復如下信息:
[圖片上傳失敗...(image-901657-1609900373389)]

大意就是要使用他們提供的兩種方式確認一下這個域名是屬于你的洛巢。如果這個域名不是你擁有的括袒,那么可以使用他們提供的域名作為group id。

我才用的是他們提供的第一種方法稿茉,就是在域名解析添加一條解析锹锰,記錄類型為TXT,主機記錄設為空漓库,記錄值是JIRA ticket恃慧。

然后回復他們:Yes, this domain is mine. 就ok了(英語不好,不會寫太多渺蒿,簡單粗暴就行)糕伐。

很快他們就會回復審核通過。
[圖片上傳失敗...(image-568dc3-1609900373389)]

三蘸嘶、安裝GPG

GPG下載地址:https://www.gnupg.org/download/index.html

我是Mac,所以下載的GnuPG for OS X陪汽,下載下來安裝训唱,安裝完成之后打開terminal

輸入:gpg2 --version 可以查看GPG版本
[圖片上傳失敗...(image-ed423-1609900373389)]

輸入:gpg2 --gen-key 創(chuàng)建密鑰對。根據(jù)提示輸入姓名和郵箱地址挚冤,這兩個其實不重要况增,重要的是一定要記住Passphase,相當于你的密碼训挡。生成成功之后會顯示你的公鑰信息澳骤。如果沒有找到也沒事,可以通過輸入: gpg2 --list-keys 來查詢澜薄。

找到生成好的公鑰后为肮,輸入:

gpg2 --keyserver hkp://pool.sks-keyservers.net:11371 --send-keys [你的公鑰]   # 可填完整pubKey,但需注意實際上只上傳了后綴一部分

把公鑰上傳到服務器肤京。

參考推送gpg密鑰sonatype文檔

檢查是否上傳成功:

gpg2 --keyserver hkp://pool.sks-keyservers.net --recv-keys [你的公鑰]   # 可填完整pubKey颊艳,但需注意實際上只上傳了后綴一部分

特別注意:此步驟非常重要,否則最后mvn deploy的時會校驗不通過,親測在mvn推送時可能會遇到總是No public key錯誤棋枕,可能是密鑰服務器延遲的問題白修,目前也沒有好辦法,gpg2 --list-key查看生成的密鑰找到庫文件路徑刪掉重斑,然后重新生成多試幾次兵睛。

在web上驗證是否成功上傳gpg密鑰到驗證服務:</br>
http://pool.sks-keyservers.net
[圖片上傳失敗...(image-fb0553-1609900373389)]

提示一下這里也有一個小坑需注意,搜索條件不能直接粘貼gpg生成的pubkey窥浪,需要以十六進制? 0x ?開頭加上 pubkey的后16位字符祖很,例如:

0x758F0F53778F6xxx

[圖片上傳失敗...(image-24cb2b-1609900373389)]

或在這里查:http://pool.sks-keyservers.net

[圖片上傳失敗...(image-bfc314-1609900373389)]

查詢結果:

[圖片上傳失敗...(image-c54e29-1609900373389)]

注:這里一定要能查到,后面才能deploy寒矿,否則會驗證不成功突琳。如果一次上傳不行就多試幾次,貌似我也是測試了幾次才行符相,還有就是注意上傳的地址協(xié)議開頭 "hkp://"拆融、"hkps://" 還是 "http://""https://"的區(qū)別啊终,不行就更換嘗試镜豹,如果網(wǎng)絡連不上就換一個地址試試,如:keyserver.ubuntu.com蓝牲,萬惡的中華局域網(wǎng)w(?Д?)w

提示:Sonatype公司會用到三個key-servers趟脂,校驗時會任意查其中一個,地址分別為:
http://pgp.mit.edu:11371</br>
http://keyserver.ubuntu.com:11371</br>
http://pool.sks-keyservers.net:11371</br>

三例衍、配置Maven

修改maven全局配置文件setting.xml昔期,找到<servers></servers>,在里面添加如下信息:

    <server>
        <id>sonatype-nexus-snapshots</id>
        <username>sonatype用戶名</username>
        <password>sonatype密碼</password>
    </server>
    <server>
        <id>sonatype-nexus-staging</id>
        <username>sonatype用戶名</username>
        <password>sonatype密碼</password>
    </server>

將用戶名和密碼改成之前注冊的sonatype的用戶名密碼就好了佛玄。

由于我安裝的是GPG2所以要需要在下面修改一個地方硼一,找到<profiles></profiles>,添加:

    <profile>
        <id>gpg</id>
        <properties>
            <gpg.executable>gpg2</gpg.executable>
            <gpg.passphrase>mypassphrase</gpg.passphrase>
        </properties>
    </profile>

找到<activeProfiles></activeProfiles>梦抢,添加:

    <activeProfile>gpg</activeProfile>

完成后保存退出般贼。

在待上傳的項目中的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>開發(fā)者名</name>
            <email>開發(fā)者郵箱</email>
        </developer>
    </developers>
    <scm>
        <connection>scm:項目的ssh地址</connection>
        <developerConnection>scm:項目的ssh地址</developerConnection>
        <url>項目地址</url>
    </scm>
    <profiles>
        <profile>
            <id>release</id>
            <build>
                <plugins>
                    <!-- Source -->
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-source-plugin</artifactId>
                        <executions>
                            <execution>
                                <phase>package</phase>
                                <goals>
                                    <goal>jar-no-fork</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                    <!-- Javadoc -->
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-javadoc-plugin</artifactId>
                        <executions>
                            <execution>
                                <phase>package</phase>
                                <goals>
                                    <goal>jar</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                    <!-- GPG -->
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-gpg-plugin</artifactId>
                        <version>1.6</version>
                        <executions>
                            <execution>
                                <phase>verify</phase>
                                <goals>
                                    <goal>sign</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
            <distributionManagement>
                <snapshotRepository>
                    <id>sonatype-nexus-snapshots</id>
                    <url>https://oss.sonatype.org/content/repositories/snapshots/</url>
                </snapshotRepository>
                <repository>
                    <id>sonatype-nexus-staging</id>
                    <url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
                </repository>
            </distributionManagement>
        </profile>
    </profiles>

將上面配置中的漢字內(nèi)容替換為對應的信息就完成了。

四奥吩、推送到Maven中央倉庫

大功告成哼蛆,可以通過deploy推送了使用下面代碼推送到maven中央倉庫:

mvn clean deploy -P release

看到顯示BUILD SUCCESS后就可以愉快的到中央倉庫(https://oss.sonatype.org,使用sonatype賬號登陸 -> 左邊點擊 Staging Repositories)霞赫,找發(fā)布的項目了腮介。

當然前提是sonatype中創(chuàng)建的工單要審核通過,如果審核還沒有通過是發(fā)布不了的端衰,項目會在Staging Repositories菜單里萤厅。等審核通過后你需要選擇你的項目橄抹,然后先點擊close,順利close之后(也就是在activity標簽中沒有報錯信息惕味,并且項目對應的status變?yōu)閏losed)楼誓,再點一下release,等待release結束之后就完成了名挥。

五疟羹、最后別忘了通知管理員關閉工單

在之前的工單下面添加一條備注,我寫的:This Component has been successfully released, thank you.(也不知道有沒有語操骶蟆)榄融。等管理員審核通過關閉了這個工單就算徹底完成了。

是不是很麻煩救湖?沒關系愧杯,只有第一次會這么麻煩,今后只要group id沒有發(fā)生變化就可以直接推送鞋既,不需要在做這些繁瑣的工作了力九。

附maven倉庫搜索地址:https://search.maven.org/,以上工序都完成后可以在這個地址搜到自己推送的組件邑闺。

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末跌前,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子陡舅,更是在濱河造成了極大的恐慌抵乓,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件靶衍,死亡現(xiàn)場離奇詭異灾炭,居然都是意外死亡,警方通過查閱死者的電腦和手機颅眶,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進店門咆贬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人帚呼,你說我怎么就攤上這事≈灞模” “怎么了煤杀?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長沪哺。 經(jīng)常有香客問我沈自,道長,這世上最難降的妖魔是什么辜妓? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任枯途,我火速辦了婚禮忌怎,結果婚禮上,老公的妹妹穿的比我還像新娘酪夷。我一直安慰自己榴啸,他們只是感情好,可當我...
    茶點故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布晚岭。 她就那樣靜靜地躺著鸥印,像睡著了一般。 火紅的嫁衣襯著肌膚如雪坦报。 梳的紋絲不亂的頭發(fā)上库说,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天,我揣著相機與錄音片择,去河邊找鬼潜的。 笑死,一個胖子當著我的面吹牛字管,可吹牛的內(nèi)容都是我干的啰挪。 我是一名探鬼主播,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼纤掸,長吁一口氣:“原來是場噩夢啊……” “哼脐供!你這毒婦竟也來了?” 一聲冷哼從身側響起借跪,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤政己,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后掏愁,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體歇由,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年果港,在試婚紗的時候發(fā)現(xiàn)自己被綠了沦泌。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,064評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡辛掠,死狀恐怖谢谦,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情萝衩,我是刑警寧澤回挽,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站猩谊,受9級特大地震影響千劈,放射性物質發(fā)生泄漏。R本人自食惡果不足惜牌捷,卻給世界環(huán)境...
    茶點故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一墙牌、第九天 我趴在偏房一處隱蔽的房頂上張望涡驮。 院中可真熱鬧,春花似錦喜滨、人聲如沸捉捅。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽锯梁。三九已至,卻和暖如春焰情,著一層夾襖步出監(jiān)牢的瞬間陌凳,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工内舟, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留合敦,地道東北人。 一個月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓验游,卻偏偏與公主長得像充岛,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子耕蝉,可洞房花燭夜當晚...
    茶點故事閱讀 42,802評論 2 345