將自己的 jar 包釋出到 maven 中央倉庫
註冊
首先到sonatype官網進行註冊!
找到註冊“sign up”,如圖,進行註冊!
登入
登入後,在頁面上方點選“create”進行建立 issue。
獲得如下圖所示。
- Summary:寫你想做什麼,你的包的功能。簡單概述,要短一點。
- Description:可以直接複製 summary,然後加一點描述資訊。
- Group Id :推薦寫 github。例如我的是
io.github.dslzc
,很快能通過,自己域名的話我沒試過,雖然我有自己的域名。 - Project UR : 你的專案的描述,填寫你的專案的 github 地址就可以了。
- SCM url: 有填寫說明的,如https://github.com/DSLZC/dslcode-common-utils.git。
- Username(s):邀請其他人有許可權一起完成這個專案。我當時沒填。
等待 Issue 審批通過
網上說需要一天到兩天。為何我這一步是秒過的。大概 20 秒過後我就接收到通過郵件了。或許是我填寫的 github 比較好認真真實性。
配置 GPG
如果是 Windows 作業系統,需要下載 Gpg4win 軟體來生成金鑰對。建議大家下載 Gpg4win-Vanilla 版本,因為它僅包括 GnuPG,這個工具才是我們所需要的。
安裝 GPG 軟體後,開啟命令列視窗,依次做以下操作:
- 檢視是否安裝成功
gpg --version
能夠顯示 GPG 的版本資訊,說明安裝成功了。
- 生成金鑰對
gpg --gen-key
此時需要輸入姓名、郵箱等欄位,其它欄位可使用預設值,此外,還需要輸入一個 Passphase,相當於一個金鑰庫的密碼,一定不要忘了,也不要告訴別人,最好記下來,因為後面會用到。
- 檢視公鑰
gpg --list-keys
如下:
D:\IdeaProjects\ScriptSpider>gpg --list-keys pub rsa2048 2018-01-10 [SC] [expires: 2020-01-10] E7135ADD7985270EC66E0B2F735A5D90291062B9 uid [ultimate] dongsilin <[email protected]> sub rsa2048 2018-01-10 [E] [expires: 2020-01-10]
我的公鑰是:E7135ADD7985270EC66E0B2F735A5D90291062B9
- 將公鑰釋出到 PGP 金鑰伺服器
gpg --keyserver hkp://pool.sks-keyservers.net:11371 --send-keys E7135ADD7985270EC66E0B2F735A5D90291062B9
此後,可使用本地的私鑰來對上傳構件進行數字簽名,而下載該構件的使用者可通過上傳的公鑰來驗證簽名,也就是說,大家可以驗證這個構件是否由本人上傳的,因為有可能該構件被壞人給篡改了。
- 查詢公鑰是否釋出成功
gpg --keyserver hkp://pool.sks-keyservers.net:11371 --recv-keys E7135ADD7985270EC66E0B2F735A5D90291062B9
實際上就是從 key server 上通過公鑰 ID 來接收公鑰,此外,也可以到 sks-keyservers.net 上通過公鑰 ID 去查詢。
修改 Maven 配置檔案
... <servers> <server> <id>dslcode</id> // 這裡要和後面呼應 <username>dslcode</username>// 登入sonatype的使用者名稱 <password>**********************</password> // 登入sonatype的密碼 </server> </servers> ...
修改你工程的 pom 檔案
你可以增加你自己其他的,這個是我當時的 pom。
<groupId>io.github.dslzc</groupId> <artifactId>dslcode.common.utils</artifactId> <version>0.0.1</version> <packaging>jar</packaging> <name>Java-Common-Utils</name> <description>我的常用工具包 Java Common Utils</description> <url>https://github.com/DSLZC/dslcode-common-utils</url> <licenses> <license> <name>The MIT License (MIT)</name> <url>http://www.opensource.org/licenses/mit-license.html</url> <distribution>repo</distribution> </license> </licenses> <developers> <developer> <name>****</name> <email>****@foxmail.com</email> </developer> </developers> <scm> <connection>scm:git:https://github.com/DSLZC/dslcode-common-utils.git</connection> <developerConnection>scm:git:https://github.com/DSLZC/dslcode-common-utils.git</developerConnection> <url>https://github.com/DSLZC/dslcode-common-utils</url> </scm> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> <spring.version>4.3.3.RELEASE</spring.version> <aspectj.version>1.8.9</aspectj.version> <servlet.version>3.1.0</servlet.version> <javax.validation.version>1.1.0.Final</javax.validation.version> <fasterxml.version>2.8.1</fasterxml.version> <commons.io.version>2.4</commons.io.version> <dom4j.version>1.6.1</dom4j.version> <dozer.version>5.5.1</dozer.version> <lombok.version>1.16.10</lombok.version> <joda.time.version>2.9.4</joda.time.version> <apache.poi.version>3.14</apache.poi.version> <thumbnailator.version>0.4.8</thumbnailator.version> </properties> <dependencies> ************ </dependencies> <build> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.8</source> <target>1.8</target> <encoding>UTF-8</encoding> </configuration> </plugin> <plugin> <artifactId>maven-jar-plugin</artifactId> <configuration> <archive> <addMavenDescriptor>true</addMavenDescriptor> <index>true</index> <manifest> <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries> <addDefaultImplementationEntries>true</addDefaultImplementationEntries> </manifest> </archive> </configuration> </plugin> <plugin> <artifactId>maven-source-plugin</artifactId> <executions> <execution> <id>attach-sources</id> <goals> <goal>jar</goal> </goals> </execution> </executions> </plugin> <plugin> <artifactId>maven-javadoc-plugin</artifactId> <version>2.10.1</version> <executions> <execution> <id>attach-javadoc</id> <goals> <goal>jar</goal> </goals> <configuration> <additionalparam>-Xdoclint:none</additionalparam> </configuration> </execution> </executions> <configuration> <show>public</show> <charset>UTF-8</charset> <encoding>UTF-8</encoding> <docencoding>UTF-8</docencoding> <failOnError>false</failOnError> <!--<excludePackageNames>com.dslcode.*</excludePackageNames>--> </configuration> </plugin> <plugin> <artifactId>maven-gpg-plugin</artifactId> <executions> <execution> <id>sign-artifacts</id> <phase>verify</phase> <goals> <goal>sign</goal> </goals> </execution> </executions> </plugin> </plugins> </build> <distributionManagement> <snapshotRepository> <id>dslcode</id> <url>https://oss.sonatype.org/content/repositories/snapshots/</url> </snapshotRepository> <repository> <id>dslcode</id> <url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url> </repository> </distributionManagement> </project>
上傳構件到 OSS 中
mvn clean deploy -Dmaven.test.skip=true -Dgpg.passphrase=************
有時候會彈出來讓你輸入Passphase 密碼,Passphase 就是 GPG 金鑰對的密碼,只有自己才知道。在之前的步驟中已經告訴你要牢記了。
隨後會看到大量的 upload 資訊,而且速度比較慢,如果出現 timeout,需要反覆嘗試。
在 OSS 中釋出構件
開啟https://oss.sonatype.org,使用自己的 Sonatype 賬號登入後,點選左側的 Staging Repositories ,在最下方可以看到剛才已上傳的構件,或者搜尋自己的構件。
這些構件目前是放在 Staging 倉庫中,可進行模糊查詢,快速定位到自己的構件。
此時,該構件的狀態為 Open,需要勾選它,然後點選 Close 按鈕。
接下來系統會自動驗證該構件是否滿足指定要求,當驗證完畢後,狀態會變為 Closed。
如果檢查出現問題,會有詳細的記錄,需要把改構件Drop,解決問題後再重新deploy。
最後,點選 Release 按鈕來發布該構件。
通知 Sonatype“構件已成功釋出”
需要在曾經建立的 Issue 下面回覆一條“構件已成功釋出”(Hi,my component has been successfully published.thanks!)的評論,這是為了通知 Sonatype 的工作人員為需要釋出的構件做審批,釋出後工作人員會關閉該 Issue。
我的 issue 展示
通過該截圖,你應該知道我們都做了什麼。
如果是釋出的話,請注意 artifactId 不能是 -SNAPSHOT
因為從截圖看(經過證明),一旦你的 issue 第一次被批准,你就可以釋出-SNAPSHOT
了,而且我當時嘗試了使用我的-SNAPSHOT
版本的 jar,並不需要進行後續操作。
等待構件審批通過
沒錯,還是要等,我大概等了一個多小時吧。看我的郵件列表的回覆。意思大概是 10 分鐘就可以使用了,2 小時才能被搜尋到。我猜用映象的應該更慢,需要同步的。感覺他們的效率還是很高,沒有我查到的別人用一到兩天。
最後,就可以到中央倉庫中搜索到自己釋出的構件了!中央倉庫搜尋網站:http://search.maven.org/
第一次之後
你就可以安心的開車了 ~
以後的釋出流程是:
-
構件準備好之後,在命令列上傳構建
-
在https://oss.sonatype.org/“close”並“release”構件
-
等待同步好(大約 2 小時多)之後,就可以使用了。
OK,準備下車啦!!!!!!!
轉載於:https://my.oschina.net/dslcode/blog/1605264