Maven中央倉庫發(fā)布的實(shí)現(xiàn)方法
一、前言
最近自己在學(xué)習(xí)Spring boot的過程中開發(fā)了一個(gè)組件 multithreadpool-spring-boot-starter,通過這個(gè)組件,我們可以動(dòng)態(tài)根據(jù)配置文件進(jìn)行多個(gè)線程池的初始化。既然有這個(gè)產(chǎn)出后,肯定是希望能夠上傳到maven中央倉庫,給更多的人使用,于是就產(chǎn)生了這次項(xiàng)目發(fā)布經(jīng)歷。
整個(gè)過程可謂是一波三折,由于平時(shí)工作比較忙只能晚上花一個(gè)小時(shí)搞,所以在經(jīng)歷了近一周的時(shí)間后,終于成功發(fā)布上去了。
下面把我當(dāng)時(shí)的上傳過程記錄下來,希望幫助更多的朋友。
二、環(huán)境準(zhǔn)備
1> mac osx 10.14.6 : 本文主要以mac環(huán)境為準(zhǔn)
2>Apache Maven 3.2.3 : 本文主要使用maven進(jìn)行構(gòu)建和發(fā)布例子的說明
三、步驟說明
1、工單創(chuàng)建
1> 訪問sonatype并注冊(cè)賬號(hào)https://issues.sonatype.org,注意要記住賬號(hào)密碼,會(huì)用于我們后續(xù)的發(fā)布及相關(guān)操作
2> 如圖新建一個(gè)issue,項(xiàng)目需要選擇Community Support - Open Source Project Repository Hosting
3> 參考下圖填寫概要、Group Id、項(xiàng)目地址、代碼管理地址,填寫后點(diǎn)擊確認(rèn)提交。網(wǎng)上很多都說需要幾個(gè)小時(shí)或者隔天才有回復(fù),我當(dāng)時(shí)等了10分鐘就收到回復(fù)了。此時(shí),對(duì)方跟你說兩件事情:
- 【提醒】確保 group id對(duì)應(yīng)的域名是你的
- 【校驗(yàn)】比如我是的項(xiàng)目地址是github上的,他會(huì)要求我在github上創(chuàng)建一個(gè)和issue同名的項(xiàng)目確保我擁有該項(xiàng)目的管理權(quán)限,
完成確認(rèn)并創(chuàng)建和issue同名的項(xiàng)目后,記得要在issue進(jìn)行回復(fù),具體參考: sonatype-issue和 Github倉庫
4> 在通過上述的確認(rèn)和校驗(yàn)后,sonatype會(huì)回復(fù)你到時(shí)候maven發(fā)布會(huì)用到的snapshot地址和release地址,并提醒你首次發(fā)布后需要回復(fù)該issue,詳情參考issue
2、gpg 環(huán)境安裝
gpg的主要作用是生成密鑰對(duì),會(huì)用于后續(xù)我們組件發(fā)布的校驗(yàn)。
1> 下載地址:https://www.gnupg.org/download/
2> 如圖紅色框所示下載并安裝
3> 在安裝完成后,執(zhí)行以下命令生成密鑰對(duì),按照提示輸入賬號(hào)、郵箱、密碼 (PS: 此處的密碼在后面發(fā)布會(huì)用到,請(qǐng)務(wù)必記住)
gpg2 --gen-key
4> 執(zhí)行命令查看密鑰, 此時(shí)控制臺(tái)會(huì)輸出類似下面的內(nèi)容
$ gpg2 --list-keys ... pub rsa2048 2019-04-12 [SC] [有效至:2021-04-11] 9A1640F7A2551131612D51B12D83594B7B29D86A uid [ 絕對(duì) ] xiaoxuetu <xiaoxuetu@163.com> sub rsa2048 2019-04-12 [E] [有效至:2021-04-11]
5> 執(zhí)行以下命令將公鑰發(fā)布到服務(wù)器中
$ gpg --keyserver hkp://subkeys.pgp.net --send-keys 9A1640F7A2551131612D51B12D83594B7B29D86A ... gpg: 正在發(fā)送密鑰 2D83594B7B29D86A 到 hkp://subkeys.pgp.net gpg: 發(fā)送至公鑰服務(wù)器失?。篠erver indicated a failure gpg: 發(fā)送至公鑰服務(wù)器失?。篠erver indicated a failure
6> 如果控制臺(tái)輸出如上面類似的錯(cuò)誤內(nèi)容,則將命令中的密鑰調(diào)整為2D83594B7B29D86A
$ gpg --keyserver hkp://subkeys.pgp.net --send-keys 2D83594B7B29D86A gpg: sending key 2D83594B7B29D86A to hkp://pool.sks-keyservers.net
3、Maven全局配置
一般情況下,maven全局配置存在于 ${HOME}/.m2/setting.xml ,如果這個(gè)目錄下沒有,則可以從 ${MAVEN_HOME}/conf/setting.xml 拷貝一份到${HOME}/.m2 目錄下并進(jìn)行以下修改
1> 添加服務(wù)器驗(yàn)證信息
<server> <id>sonatype_releases</id> <username>your user name</username> <password>your password</password> </server> <server> <id>sonatype_snapshots</id> <username>your user name</username> <password>your password</password> </server>
2> 配置gpg驗(yàn)證命令
<settings> <profiles> <profile> <id>gpg</id> <properties> <!-- 由于我電腦安裝的是gpg2,不存在gpg命令,所以需要指定執(zhí)行g(shù)pg2,否則會(huì)報(bào)錯(cuò) --> <gpg.executable>gpg2</gpg.executable> <gpg.passphrase>your password</gpg.passphrase> </properties> </profile> </profiles> <activeProfiles> <activeProfile>gpg</activeProfile> </activeProfiles> </settings>
4、項(xiàng)目maven配置
1> 在項(xiàng)目的pom.xml中,配置相應(yīng)的開源協(xié)議、倉庫信息、開發(fā)人員信息和發(fā)布配置
<!-- 開源簽名證書 --> <licenses> <license> <name>The Apache Software License, Version 2.0</name> <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url> <distribution>repo</distribution> </license> </licenses> <!-- 倉庫信息 --> <scm> <connection>scm:git:git@github.com:xiaoxuetu/multithreadpool-spring-boot-starter.git</connection> <developerConnection>scm:git:git@github.com:xiaoxuetu/multithreadpool-spring-boot-starter.git </developerConnection> <url>http://github.com/xiaoxuetu/multithreadpool-spring-boot-starter/tree/master</url> </scm> <!-- 開發(fā)人員信息 --> <developers> <developer> <name>xiaoxuetu</name> <email>xiaoxuetu@163.com</email> <organization>https://github.com/xiaoxuetu</organization> <timezone>+8</timezone> </developer> </developers> <!-- 發(fā)布管理信息 --> <distributionManagement> <repository> <!-- 這里的id必須要和全局配置中的release id 一致 --> <id>sonatype_releases</id> <name>Nexus Release Repository</name> <!-- 這里就是在創(chuàng)建issue成功后,對(duì)方回復(fù)的release發(fā)布地址--> <url>https://oss.sonatype.org/service/local/staging/deploy/maven2</url> </repository> <snapshotRepository> <!-- 這里的id必須要和全局配置中的snapshot id 一致 --> <id>sonatype_snapshots</id> <name>Nexus Snapshot Repository</name> <!-- 這里就是在創(chuàng)建issue成功后,對(duì)方回復(fù)的snapshot發(fā)布地址--> <url>https://oss.sonatype.org/content/repositories/snapshots</url> </snapshotRepository> </distributionManagement>
2> 由于發(fā)布到maven中央倉庫會(huì)要求我們?cè)谏蟼鱦ar到同時(shí),必須同步發(fā)布對(duì)應(yīng)到Javadoc、source、asc(利用gpg生成到校驗(yàn)),所以需要在maven中添加以下構(gòu)建插件
<build> <plugins> <plugin> <groupId>org.sonatype.plugins</groupId> <artifactId>nexus-staging-maven-plugin</artifactId> <version>1.6.7</version> <extensions>true</extensions> <configuration> <!-- 這里的id必須要和全局配置中的release id 一致 --> <serverId>sonatype_releases</serverId> <nexusUrl>https://oss.sonatype.org/</nexusUrl> <!-- 如果希望發(fā)布后自動(dòng)執(zhí)行close和release操作,此處可以調(diào)整為true --> <autoReleaseAfterClose>false</autoReleaseAfterClose> </configuration> </plugin> <!-- 生成java source.jar --> <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> <!-- 生成asc 校驗(yàn)文件 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-gpg-plugin</artifactId> <version>1.5</version> <executions> <execution> <!-- 必須和配置中的gpg校驗(yàn)id一致 --> <id>gpg</id> <phase>verify</phase> <goals> <goal>sign</goal> </goals> </execution> </executions> </plugin> </plugins> </build>
5、發(fā)布操作
1> 執(zhí)行以下命令進(jìn)行發(fā)布(如果 pom.xml 中autoReleaseAfterClose 的值為true,則腳本會(huì)自動(dòng)完成在平臺(tái)上close、release的操作,至此你將成功發(fā)布了,否則我們繼續(xù)查看第2步)
mvn clean javadoc:jar deploy -P release
2>登錄https://oss.sonatype.org,然后選擇staging Repositories
3> 如下圖搜索并選擇需要發(fā)布的組件,依次執(zhí)行Close、Release操作
4> 如果Release成功,并且你是首次發(fā)布組件,則需要到你創(chuàng)建到issue中回復(fù) “我已經(jīng)成功發(fā)布該組件”,經(jīng)歷大概2小時(shí)后,該組件將會(huì)同步到對(duì)應(yīng)的maven倉庫
5> 如果Close或者Release不成功,你可以如下圖操作查看原因并谷歌定位,或者回復(fù)咨詢
四、參考文檔
1>發(fā)布構(gòu)件到 Maven 中央倉庫遇到的坑:https://juejin.im/post/5cb03e1a5188251b0e4e3583
2>Working with PGP Signatures:https://central.sonatype.org/pages/working-with-pgp-signatures.html
3>Deploying to OSSRH with Apache Maven:https://central.sonatype.org/pages/apache-maven.html
到此這篇關(guān)于Maven中央倉庫發(fā)布的實(shí)現(xiàn)方法的文章就介紹到這了,更多相關(guān)Maven中央倉庫發(fā)布內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Springboot分模塊項(xiàng)目搭建的實(shí)現(xiàn)
在軟件開發(fā)中,利用Spring?Boot進(jìn)行分模塊項(xiàng)目搭建能夠提高代碼的模塊化和復(fù)用性,本文主要介紹了Springboot分模塊項(xiàng)目搭建的實(shí)現(xiàn),感興趣的可以了解一下2024-10-10JAVA實(shí)現(xiàn)經(jīng)典游戲坦克大戰(zhàn)的示例代碼
小時(shí)候大家都玩過坦克大戰(zhàn)吧,熟悉的旋律和豐富的關(guān)卡陪伴了我們一整個(gè)寒暑假。本文將通過Java+Swing實(shí)現(xiàn)這一經(jīng)典游戲,感興趣的可以學(xué)習(xí)一下2022-01-01Java設(shè)計(jì)模式之橋接模式實(shí)例詳解
這篇文章主要介紹了Java設(shè)計(jì)模式之橋接模式,結(jié)合實(shí)例形式詳細(xì)分析了橋接模式的概念、功能、Java實(shí)現(xiàn)方法及相關(guān)注意事項(xiàng),需要的朋友可以參考下2017-09-09Python爬蟲之爬取2020女團(tuán)選秀數(shù)據(jù)
本文將對(duì)比《青春有你2》和《創(chuàng)造營2020》全體小姐姐,鑒于兩個(gè)節(jié)目的數(shù)據(jù)采集和處理過程基本相似,在使用Python做數(shù)據(jù)爬蟲采集的章節(jié)中將只以《創(chuàng)造營2020》為例做詳細(xì)介紹。感興趣的同學(xué)可以照貓畫虎去實(shí)操一下《青春有你2》的數(shù)據(jù)爬蟲采集,需要的朋友可以參考下2021-04-04在Java中將double轉(zhuǎn)換為int的操作方法
這篇文章主要介紹了在Java中將double轉(zhuǎn)換為int的操作方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03