本文記錄一下將jar上傳到maven中央倉庫的全過程,文中項目依托在github上,使用的是mac環境 (關於maven、jdk的環境配置不屬於本文內容)
1. sonatype賬號申請
首先我們需要申請一個賬號,地址為: https://issues.sonatype.org/secure/Signup!default.jspa
請記住這個賬號的用戶名 + 密碼,在后續的maven的setting.xml
配置文件中需要用到
賬號申請完畢之后,點擊新建
按鈕(如果是因為的話,就是create
),提交一個issue
- 項目:選擇
Community Support - Open Source Project Repository Hosting (OSSRH)
- 問題類型:選擇
New Project
- 概要:項目說明
- 描述:項目說明
- GroupId: 請注意,對於github項目而言,前綴都是
com.github
,后面跟着的是你的賬號名,比如我的賬號是liuyueyi
,所以我的groupId是com.github.liuyueyi
,如果不滿足這個規則將無法通過后續的審核 Project URL
: 項目地址,填對應的github連接 https://github.com/liuyueyi/quick-chinese-transferSCM URL
: 和上面的基本一致,只是多了一個.git
基本上需要配置的東西如下圖,最后點擊新建即可
上面提交之后,等待審核即可
2. GPG安裝
在后續的上傳jar包時,需要利用gpg進行簽名,下面介紹一下mac的安裝流程
推薦用法
macos安裝可以借助homebrew來實現
brew install gpg
備選方案
但是我的mac系統比較老,使用上面的方式安裝失敗,直接拋了異常,根據搜索結果來看,不升級系統貌似沒有什么好的解決辦法
下面是采用安裝包的方式,原則上建議到官網去下載安裝包,依然是因為版本問題,最新的我也安裝不上,所以找了一個歷史的下載網址,(不保證這個網站上的安裝包的安全性。雖然我自己用的也是它)
如有需要,可以跳轉: https://sourceforge.net/p/gpgosx/docu/Download/
我選擇的是2.2.12
版本,安裝完畢之后,可以查看一下里面的readme
文件,查看具體的安裝路徑
比如在我的電腦上安裝路徑為: /usr/local/gnupg-2.2/bin
,為了方便使用,可以設置一下環境
vim ~/.bash_profile
# 添加新的path路徑
PATH=$PATH:/usr/local/gnupg-2.2/bin
source ~/.bash_profile
密鑰生成及發布
安裝完畢之后,設置我們自己的密鑰
# 生成密鑰對
# 輸入用戶名 + 郵箱,請記住這個密碼,后面上傳jar包的時候會用到
gpg --gen-key
查看本地密鑰
# 生成完畢之后,查看本地密鑰
gpg --list-keys
上圖中勾住的就是我們的公鑰id,接下來將公鑰id上傳到密鑰服務器
## 上傳公鑰
gpg --keyserver hkp://keyserver.ubuntu.com:11371 --send-keys 公鑰ID
## 查看公鑰上傳情況
gpg --keyserver hkp://keyserver.ubuntu.com:11371 --recv-keys 公鑰ID
3. maven配置
接下來,我們需要設置一下我們的maven配置文件setting.xml
,將我們的用戶信息填寫進去
vim ~/.m2/setting.xml
添加第一步中申請的賬號信息,(用戶名+密碼就是第一步申請的賬號密碼)
# 添加賬號信息
<servers>
<server>
<id>ossrh</id>
<username>user</username>
<password>password</password>
</server>
</servers>
4. 項目配置
前面的步驟屬於大的環境相關,接下來就需要在我們的實際項目中,配置必要的信息了,這里以https://github.com/liuyueyi/quick-chinese-transfer的配置為實例進行說明
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.github.liuyueyi</groupId>
<artifactId>quick-chinese-transfer</artifactId>
<packaging>pom</packaging>
<version>0.1</version>
<modules>
<module>transfer-core</module>
</modules>
<name>quick-chinese-transfer</name>
<description>
A Java library supporting conversion between Simplified-Chinese, Traditional-Chinese
</description>
<url>https://github.com/liuyueyi/quick-chinese-transfer</url>
<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>
<issueManagement>
<system>github</system>
<url>https://github.com/liuyueyi/quick-chinese-transfer/issues</url>
</issueManagement>
<scm>
<connection>scm:git:https://github.com/liuyueyi/quick-chinese-transfer.git</connection>
<developerConnection>scm:git:https://github.com/liuyueyi/quick-chinese-transfer.git</developerConnection>
<url>https://github.com/liuyueyi/quick-chinese-transfer</url>
</scm>
<developers>
<developer>
<name>YiHui</name>
<email>bangzewu@126.com</email>
<url>http://blog.hhui.top</url>
</developer>
</developers>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<configuration>
<mavenExecutorId>forked-path</mavenExecutorId>
<useReleaseProfile>false</useReleaseProfile>
<arguments>-Psonatype-oss-release</arguments>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>3.1.0</version>
<inherited>true</inherited>
<executions>
<execution>
<id>attach-sources</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
<configuration>
<excludeResources>true</excludeResources>
<useDefaultExcludes>true</useDefaultExcludes>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>3.0.0</version>
<inherited>true</inherited>
<executions>
<execution>
<id>bundle-sources</id>
<phase>package</phase>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
<configuration>
<maxmemory>1024</maxmemory>
<encoding>UTF-8</encoding>
<show>protected</show>
<notree>true</notree>
<!-- Avoid running into Java 8's very restrictive doclint issues -->
<failOnError>false</failOnError>
<doclint>none</doclint>
</configuration>
</plugin>
</plugins>
</pluginManagement>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>cobertura-maven-plugin</artifactId>
<version>2.7</version>
<configuration>
<formats>
<format>html</format>
<format>xml</format>
</formats>
<check/>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>3.1.0</version>
<configuration>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
</plugin>
</plugins>
</build>
<distributionManagement>
<repository>
<id>ossrh</id>
<url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
</repository>
<snapshotRepository>
<id>ossrh</id>
<url>https://oss.sonatype.org/content/repositories/snapshots</url>
</snapshotRepository>
</distributionManagement>
<profiles>
<profile>
<id>release</id>
<build>
<plugins>
<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>
</plugins>
</build>
</profile>
</profiles>
</project>
上面是一個完整的配置信息,其中,非常核心的幾個點
groupId
: 請注意與申請的保持一致plugins
: 我們上傳的jar包,需要包含doc和源碼,所以maven-source-plugin
+maven-javadoc-plugin
必不可少maven-gpg-plugin
: 簽名的插件,必要
在我的實際項目開發過程中,這里遇到了一個問題,maven-gpg-plugin
下載不下來一直標紅,如果遇到這種問題,可以定向下載
mvn dependency:get -DrepoUrl=http://repo.maven.apache.org/maven2/ -Dartifact=org.apache.maven.plugins:maven-gpg-plugin:1.6
除此之外,還可以通過idea設置 -> maven -> Repositories
更新依賴
上面這個配置完畢之后,就是打包上傳,直接使用以下命令即可
mvn clean deploy -DskipTests=true -P release
這個命令執行過程中,會彈出一個輸入gpg密碼的彈窗,輸入我們第二步中生成gpg密鑰時,填寫的密碼即可
jar包上傳完畢之后,就可以在https://oss.sonatype.org/看到了
注意
當我們第一步提交的issues審核之后,會有一個郵件通知你,可以發布對應的jar包了,也可以在issues看到下面的回復,一般有下面兩步
- 提示你在github上創建一個權限驗證的空的倉庫
- 創建完畢之后,改變issue狀態
- 提示你可以上傳jar包了
- 接着執行上面的jar包發布
5. jar包發布
接下來登錄 https://oss.sonatype.org/#stagingRepositories 管理我們上傳的jar包
- 點擊
Staging Repositories
- 選中我們需要發布的jar
- 點擊close
close點擊完畢之后,如果一切正常,那么等待一段時間之后,就可以發現release按鈕可以點擊了,然后點擊release發布即可
如果一切順利,我們會收到一個郵件,告訴我們發布成功,准備同步jar包了
然后等十來分鍾,就可以直接依賴導入jar包了
<dependency>
<groupId>com.github.liuyueyi</groupId>
<artifactId>quick-transfer-core</artifactId>
<version>0.1</version>
</dependency>
注意
關於上面這個發布,有可能沒有那么順利,比如我之前遇到了幾個問題,點擊選中包的Activites
可以查看失敗的原因
上面幾個問題的原因主要在於項目的pom配置有問題,導致上傳的包沒有簽名,沒有source
, java-doc
其次還遇到過一次說是gpg密鑰沒有找到的問題,這個有可能是因為我們上傳的密鑰還沒有同步過去,有延遲,再試一次就可以了
5. 小結
雖然網上挺多這種教程,但是在實際的操作中,總會遇到一些別人沒有遇到的問題,當然如果沒有遇到問題,那當然是最幸運的事情了;本文主要是為了記錄jar包上傳的中央倉庫的全過程,做一個歸納小結,也方便后續的查閱,當然如果對其他的小伙伴能有所幫助也是不錯的
在寫本文的時候,已經可以在中央倉庫搜索到上傳的jar包了
參考文檔
II. 其他
1. 一灰灰Blog: https://liuyueyi.github.io/hexblog
一灰灰的個人博客,記錄所有學習和工作中的博文,歡迎大家前去逛逛
2. 聲明
盡信書則不如,以上內容,純屬一家之言,因個人能力有限,難免有疏漏和錯誤之處,如發現bug或者有更好的建議,歡迎批評指正,不吝感激
- 微博地址: 小灰灰Blog
- 微信公眾號:一灰灰blog