原文: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,但需注意實際上只上傳了后綴一部分
把公鑰上傳到服務器肤京。
檢查是否上傳成功:
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/,以上工序都完成后可以在這個地址搜到自己推送的組件邑闺。