如何將自己的代碼發布到Maven中央倉庫?


去年在公司做工作流相關業務時,當時使用flowable做引擎,中途涉及到一些業務上的需求,自己整理了一些代碼,考慮到開源精神,當時就想着將於公司業務無關的代碼抽離出來,放到Maven中央倉庫中,以供別人學習借鑒,跟着各路大神的帖子折騰了不少時間,一路曲折最終發布到倉庫中,地址在此 https://mvnrepository.com/artifact/com.github.songyz0310/flowable-lang 需要的可以使用,我會不定期更新。回到本帖主題,本篇不涉及此工具包,主要說下關於Maven發布的步驟和心得。最近心血來潮,希望把這幾年的java相關的東西整理下,暫定項目集 java-toolkits 。

第一步,注冊GitHub的賬戶

地址:https://github.com

關於GitHub,無需我多說,Java語言本身就是開源的,作為Javaer又怎么離得開GitHub,注冊沒什么需要提的,這是我個人的GitHub地址,歡迎評價點星!

第二步,注冊Sonatype的賬戶

地址:https://issues.sonatype.org/secure/Signup!default.jspa

【友情提示】這里的密碼校驗真的是很太苛刻了,基本上是我見過的最嚴格的的。注冊過后一定要記在小本本上,否則,我敢說大部分人一小時之后就記不得了,

第三步,在Sonatype上提交關於本項目的發布申請

點擊頁面上方 Create 按鈕即可創建此項目的 Issue

1 Project: Community Support - Open Source Project Repository Hosting (OSSRH)
2 Issue TypeRequired: New Project
3 
4 Summary: java-toolkits (自己項目名稱)
5 Group Id:com.github.songyz0310 (maven項目坐標 Group Id)
6 Project URL:https://github.com/songyz0310/java-toolkits (項目地址)
7 SCM url:https://github.com/songyz0310/java-toolkits.git (源代碼地址)

 其他內容可以按照自己實際情況填寫,可以用默認值的地方,可以不用填寫。

當你提交后狀態為等待工作人員審核,審核通過后狀態會修改為 RESOLVED

關於此步驟審核我有個小疑問,我2018年發布flowable-lang項目時,跟2019年發布java-toolkits項目要求有些稍微的不同,后邊這一次多了對於權限的校驗,不過在工作人員的詳細回復下,問題不大。毫無疑問,這次比上次校驗的更嚴格了。當你看到最后這一條評論時,就證明你可以開始下一步了。

第四步,配置Maven

4.1,配置 settings.xml 文件

在servers節點內部添加如下server配置,這里就會用到第二步的注冊信息(~偷笑~)

 1 <server>
 2   <id>sonatype-nexus-snapshots</id>
 3   <username>Sonatype賬號</username>
 4   <password>Sonatype密碼</password>
 5 </server>
 6 <server>
 7   <id>sonatype-nexus-staging</id>
 8   <username>Sonatype賬號</username>
 9   <password>Sonatype密碼</password>
10 </server>

 

4.2,配置項目 pom.xml 文件

增加開源許可協議,SCM信息,開發者信息等待根據自己信息填寫即可

 1 <licenses>
 2     <license>
 3         <name>The Apache Software License, Version 2.0</name>
 4         <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
 5     </license>
 6 </licenses>
 7 <scm>
 8     <connection>scm:git:https://github.com/songyz0310/java-toolkits.git</connection>
 9     <developerConnection>scm:git:https://github.com/songyz0310/java-toolkits.git</developerConnection>
10     <url>git:https://github.com/songyz0310/java-toolkits.git</url>
11 </scm>
12 <developers>
13     <developer>
14         <name>songyz</name>
15         <email>songyinzeng@gmail.com</email>
16         <organization>i1stcs</organization>
17     </developer>
18 </developers>

 

如果發布Release版本,需要添加Release的相關profile配置,distributionManagement節和maven-compiler-plugin節的配置信息根據自己的實際情況做修改。

 1 <profile>
 2     <id>release</id>
 3     <build>
 4         <resources>
 5             <resource>
 6                 <directory>src/main/java</directory>
 7                 <includes>
 8                     <include>**/*.properties</include>
 9                 </includes>
10             </resource>
11         </resources>
12         <plugins>
13             <!-- Source -->
14             <plugin>
15                 <groupId>org.apache.maven.plugins</groupId>
16                 <artifactId>maven-source-plugin</artifactId>
17                 <version>2.2.1</version>
18                 <executions>
19                     <execution>
20                         <phase>package</phase>
21                         <goals>
22                             <goal>jar-no-fork</goal>
23                         </goals>
24                     </execution>
25                 </executions>
26             </plugin>
27             <!-- Javadoc -->
28             <plugin>
29                 <groupId>org.apache.maven.plugins</groupId>
30                 <artifactId>maven-javadoc-plugin</artifactId>
31                 <version>2.9.1</version>
32                 <configuration>
33                     <show>private</show>
34                     <nohelp>true</nohelp>
35                     <charset>UTF-8</charset>
36                     <encoding>UTF-8</encoding>
37                     <docencoding>UTF-8</docencoding>
38                     <additionalparam>-Xdoclint:none</additionalparam>
39                     <!-- TODO 臨時解決不規范的javadoc生成報錯,后面要規范化后把這行去掉 -->
40                 </configuration>
41                 <executions>
42                     <execution>
43                         <phase>package</phase>
44                         <goals>
45                             <goal>jar</goal>
46                         </goals>
47                     </execution>
48                 </executions>
49             </plugin>
50             <!-- GPG -->
51             <plugin>
52                 <groupId>org.apache.maven.plugins</groupId>
53                 <artifactId>maven-gpg-plugin</artifactId>
54                 <version>1.5</version>
55                 <executions>
56                     <execution>
57                         <phase>verify</phase>
58                         <goals>
59                             <goal>sign</goal>
60                         </goals>
61                     </execution>
62                 </executions>
63             </plugin>
64             <!--Compiler -->
65             <plugin>
66                 <groupId>org.apache.maven.plugins</groupId>
67                 <artifactId>maven-compiler-plugin</artifactId>
68                 <version>3.0</version>
69                 <configuration>
70                     <source>1.8</source>
71                     <target>1.8</target>
72                     <fork>true</fork>
73                     <verbose>true</verbose>
74                     <encoding>UTF-8</encoding>
75                     <showWarnings>false</showWarnings>
76                 </configuration>
77             </plugin>
78             <!--Release -->
79             <plugin>
80                 <groupId>org.apache.maven.plugins</groupId>
81                 <artifactId>maven-release-plugin</artifactId>
82                 <version>2.5.1</version>
83             </plugin>
84         </plugins>
85     </build>
86     <distributionManagement>
87         <snapshotRepository>
88             <id>sonatype-nexus-snapshots</id>
89             <name>Sonatype Nexus Snapshots</name>
90             <url>https://oss.sonatype.org/content/repositories/snapshots/</url>
91         </snapshotRepository>
92         <repository>
93             <id>sonatype-nexus-staging</id>
94             <name>Nexus Release Repository</name>
95             <url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
96         </repository>
97     </distributionManagement>
98 </profile>

第五步,配置PGP的公鑰信息

由於我使用的是Windows,Mac和Linux用戶請自行查找本步驟解決方案

Windows下使用gpg4win來進行配置。下載地址 https://www.gpg4win.org/get-gpg4win.html
安裝好之后,打開cmd控制台,使用 gpg --list-keys 命令來查詢自己配置的key
如果提示gpg不是可執行程序或命令,請配置Path路徑到 GnuPG 的bin目錄

生成密鑰的命令 gpg --gen-key,過程中需要使用到姓名、郵箱等信息,這里的配置最好和Sonatype注冊信息、pom文件配置信息保持一致,以免不必要的麻煩。
生成的過程中,會有個彈框要求輸入Passphase信息,這個是密鑰的密碼,同樣需要記牢。發布簽名的過程中會用得到。

使用 gpg --list-keys 命令查詢配置好的公私鑰信息,使用 gpg --keyserver hkp://keyserver.ubuntu.com:11371 --send-keys <公鑰key> 將公鑰信息發送到ubuntu.com服務器,后續推送maven倉庫會做校驗。

第六步,打包Deploy

使用 mvn clean deploy -P <profile-id> 命令,一鍵打包。
打包過程中會要求輸入gpg密鑰的Passphase信息,輸入即可。

【友情提示】如果打包過程中出現了401類的錯誤,可能是因為Maven的配置文件中Server節點配置的用戶名和密碼不正確,或者 Issue 還未審核通過。

第七步,發布Release

進入 https://oss.sonatype.org/#stagingRepositories 查看發布好的構件,點擊左側的Staging Repositories,可以使用Group Id或其他信息搜索自己的項目,

此時的構件狀態為 Open,選中構件,並點擊上方的 Close–>Confirm 在下邊的Activity選項卡中查看狀態。

當狀態變成closed后,執行 Release–>Confirm 並在下邊的Activity選項卡中查看狀態。
成功后構件自動刪除,一小段時間(約1-2個小時)后即可同步到maven的中央倉庫。屆時會有郵件通知。


至此,發布到Maven中央倉庫完成。

第八步,收尾工作

對自己提交的Issue增加Comment,留言致謝並表示發布已經完成,請工作人員關閉Issue

有始有終吧。☺☺☺收工~~~

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM