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