如何將java私有庫(jar)提交至公服/公共倉庫(central repository)-手動版
如何將java私有庫(jar)提交至公服/公共倉庫(central repository)-手動版
準備
GunPG(用于asc簽名)- 項目代碼(建議是
maven結構的) sonatype賬號(https://central.sonatype.com/api/auth/login)Maven Helper(Idea插件,maven命令快捷插件)github或gitee賬號(用于注冊sonatype的Namespace)
注冊sonatype->Namespace
注冊完成,點進入 View Namespaces :

點 Add namespace 如果您的github主頁是 https://github.com/funnyzpc ,則此處就是 io.github.funnyzpc ,如圖:

驗證是按照生成的 Verification Key 在自己的github賬號下建一個對應 Verification Key 的 repository ,如圖提示:

創建好 repository 后記得要點一下 sonatype 后臺的 Verify Namespace ,一定要等狀態為 Verified 時才可!

密鑰生成
- 生成
使用命令:gpg --generate-key
然后輸入名字Real name以及emailEmail address,記得下一步輸入o是保存,一般輸入o后會跳出密碼對話框,輸入自定義密碼即可~,這個密碼后續要用到!
建議: 名字建議與github的主賬戶名一致,email也是,email需要與后續項目中的(pom文件)中的 developers 標簽定義的一致~

-
公鑰上傳
-
先使用命令查看公鑰
gpg --list-keys: -
可以看到上面有一長串的
pub即是要用到上傳的公鑰: -
執行上傳命令
gpg --keyserver keyserver.ubuntu.com --send-keys [公鑰] gpg --keyserver keys.openpgp.org --send-keys [公鑰] gpg --keyserver pgp.mit.edu --send-keys [公鑰] -
keyserver一般有三個,具體見sonatype官網指導,建議每一個server都上傳一遍
具體可參見:https://central.sonatype.org/publish/requirements/gpg/#dealing-with-expired-keys
需要說明的是此環節只是為文件簽名準備的,跟其他的并無直接關系,后續上傳的
asc簽名文件是sonatype后臺從公鑰服務器做雙向文件驗證而用的。 -
項目基本改造
-
添加
plugin- 如果是多模塊工程,建議在需要上傳至公服的的模塊的
pom中配置,具體需要添加的plugin為:
- 如果是多模塊工程,建議在需要上傳至公服的的模塊的
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<configuration>
<additionalOptions>
<!-- 構建doc時忽略代碼中錯誤的doc書寫配置 -->
<additionalOption>-Xdoclint:none</additionalOption>
</additionalOptions>
</configuration>
<executions>
<execution>
<id>attach-javadocs</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-gpg-plugin</artifactId>
<version>1.6</version>
<executions>
<execution>
<id>sign-artifacts</id>
<phase>verify</phase>
<goals>
<goal>sign</goal>
</goals>
</execution>
</executions>
</plugin>
記住,必須要配置 maven-javadoc-plugin ,否則 后續 gpg 打包簽名時不會生成 javadoc ,這是個坑~
參數 -Xdoclint:none 是為了忽略javadoc拋錯而定義的!,上圖代碼有著名~
- 庫(jar文件)添加中央倉庫(
sonatype)還需要一些必要的配置,這些配置包括:description、url、scm、licenses、developers,具體xml定義位置是與properties以及dependencies是在同一級
<description>A Simplified Excel Operating Library,use POI library.</description>
<url>https://github.com/funnyzpc/mee-excel</url>
<scm>
<connection>scm:git:git@github.com:funnyzpc/mee-excel.git</connection>
<developerConnection>scm:git:git@github.com:funnyzpc/mee-excel.git</developerConnection>
<tag/>
<url>https://github.com/funnyzpc/mee-excel</url>
</scm>
<licenses>
<license>
<name>Apache License, Version 2.0</name>
<url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
<distribution>repo</distribution>
</license>
</licenses>
<developers>
<developer>
<name>funnyzpc</name>
<email>funnyzpc@gmail.com</email>
<timezone>+8</timezone>
<url>https://github.com/funnyzpc</url>
</developer>
</developers>
注意參數需要按照自己的需求配置,如果以上還少了什么,請具體以 后續上傳 時的錯誤提示來修改即可~
以上修改完成記得要在maven小窗reload以下喲~

構造基本包
后續的三種簽名均是以這四個包為基礎做簽名,我們以最 mee-excel 這個庫為參照:https://repo1.maven.org/maven2/io/github/funnyzpc/mee-excel/1.0.0/

可以看到簽名主要有這四個包為簽名對象:
[artifactId]-[版本]-javadoc.jar(文檔)[artifactId]-[版本]-sources.jar(源碼)[artifactId]-[版本].jar(源碼包)[artifactId]-[版本].pom(工程pom)
當我們猜測到上傳公共倉庫需要什么的時候 ,現在就開始生成對應的 asc、 md5、 sha1 簽名~
- 使用命令
mvn package gpg:sign -Dmaven.test.skip=true生成基本包以及asc簽名文件
注意:
- 如果是多模塊需要添加命令項目
-pl [模塊名]執行,完整:mvn package gpg:sign -Dmaven.test.skip=true -pl [模塊名] - 另外注意的是
gpg:sign命令行一定要包含package指令,在 idea 的maven小窗直接執行是不會成功的! - 執行后一般會彈出
密碼輸入框,輸入的是密鑰生成環節設置的密碼!
好了,執行成功大致是這樣子的,以我的 mee-excel 項目為例:

如果使用 Maven Helper 插件則右鍵指定的模塊,選擇 package gpg:sign -Dmaven.test.skip=true 命令執行(需要自行配置 Maven helper 后才可使用):

- 使用命令構建
md5、sha1簽名文件- 使用
windows cmd命令構建md5、sha1簽名文件(先cd到對應target目錄)
certUtil -hashfile mee-excel-1.0.0.jar md5 >> mee-excel-1.0.0.jar.md5 certUtil -hashfile mee-excel-1.0.0.jar sha1 >> mee-excel-1.0.0.jar.sha1 certUtil -hashfile mee-excel-1.0.0-sources.jar md5 >> mee-excel-1.0.0-sources.jar.md5 certUtil -hashfile mee-excel-1.0.0-sources.jar sha1 >> mee-excel-1.0.0-sources.jar.sha1 certUtil -hashfile mee-excel-1.0.0-javadoc.jar md5 >> mee-excel-1.0.0-javadoc.jar.md5 certUtil -hashfile mee-excel-1.0.0-javadoc.jar sha1 >> mee-excel-1.0.0-javadoc.jar.sha1 certUtil -hashfile mee-excel-1.0.0.pom md5 >> mee-excel-1.0.0.pom.md5 certUtil -hashfile mee-excel-1.0.0.pom sha1 >> mee-excel-1.0.0.pom.sha1 - 使用
-
使用
bash命令修改md5、sha1文件,主要是剔除無用的內容-
在
taget目錄(文件管理器中)右鍵選擇Git Bash here或者cmd窗口內切換到bash:直接bash+回車即可: -
執行命令:
sed -i '1d;3d' mee-excel-1.0.0.jar.md5 sed -i '1d;3d' mee-excel-1.0.0.pom.md5 sed -i '1d;3d' mee-excel-1.0.0-javadoc.jar.md5 sed -i '1d;3d' mee-excel-1.0.0-sources.jar.md5 sed -i '1d;3d' mee-excel-1.0.0.jar.sha1 sed -i '1d;3d' mee-excel-1.0.0.pom.sha1 sed -i '1d;3d' mee-excel-1.0.0-javadoc.jar.sha1 sed -i '1d;3d' mee-excel-1.0.0-sources.jar.sha1 -
ok,現在大致的結構如下:

構造目標結構
上一步驟的操作一定要檢查生成的簽名文件是否為空,尤其是第一次操作,而后我們思考公服上面需要上傳什么樣的包
先以 mee-excel 庫的地址為例吧,這是庫的具體地址: https://repo1.maven.org/maven2/io/github/funnyzpc/mee-excel/1.0.0/
io/github/funnyzpc是我們在sonatype后臺配置的Namespace,同時也是要對應 模塊或工程pom中的groupId!mee-excel是模塊或工程的artifactId(pom里面)1.0.0是pom中配置的版本(version), 特別要注意的是版本一定不能是或包含SNAPSHOT!
好,我們就按以上的目錄結構構造本地文件夾,將 這16 個文件裝進去,其他的不要放!

也可以參考本人已經上傳的記錄:

官方文檔請參見: https://central.sonatype.org/publish/publish-portal-upload/
提交審核
提交之前先將準備好的文件文件夾整體打包為zip,且按照 io 目錄進行打包,正常打包后文件包應該是 io.zip
- 點
sonatype后臺右上角賬號下的view Deployments - 點右上角
Publish Component Deployment Name一般是可以隨意寫一個的,建議是pom中的[artifactId]-[version](eg:mee-excel-1.0.0)Description可隨意Upload Your File選擇壓縮的zip包,然后點Publish Component即可
后續審核
注意審核狀態,默認提交后就是 PENDING 狀態 ,審核通過是 VALIDATED 狀態,一定要注意 VALIDATED 不是最終狀態! 一定要點 Publish 后才會是最終的發布狀態: PUBLISHED !
如果是 FAILED 狀態,一定要參照驗證信息來修改!
發布后 一般半天之后才會在公服 https://repo1.maven.org/maven2 上看得到,發布一天后才可在 https://mvnrepository.com 搜索到,至于阿里云上面啥時候能查詢得我也不知道~
只要在 https://repo1.maven.org/maven2 上能看得到提交的文件時才可使用對應的 dependency ,具體可以使用地址 https://central.sonatype.com/artifact/[groupId]/[artifactId] (eg: https://central.sonatype.com/artifact/io.github.funnyzpc/mee-excel 查詢
eg:
<dependency>
<groupId>io.github.funnyzpc</groupId>
<artifactId>mee-excel</artifactId>
<version>1.0.0</version>
</dependency>

浙公網安備 33010602011771號