Maven 中央倉庫提交Jar包全程指南
本文記錄一下將jar上傳到maven中央倉庫的全過程,文中項目依託在github上,使用的是mac環境 (關於maven、jdk的環境配置不屬於本文內容)html
<!-- more -->java
首先咱們須要申請一個帳號,地址爲: https://issues.sonatype.org/secure/Signup!default.jspagit
請記住這個帳號的用戶名 + 密碼,在後續的maven的setting.xml
配置文件中須要用到github
帳號申請完畢以後,點擊新建
按鈕(若是是由於的話,就是create
),提交一個issuemacos
Community Support - Open Source Project Repository Hosting (OSSRH)
New Project
com.github
,後面跟着的是你的帳號名,好比個人帳號是liuyueyi
,因此個人groupId是 com.github.liuyueyi
,若是不知足這個規則將沒法經過後續的審覈Project URL
: 項目地址,填對應的github鏈接 https://github.com/liuyueyi/quick-chinese-transferSCM URL
: 和上面的基本一致,只是多了一個.git
基本上須要配置的東西以下圖,最後點擊新建便可apache
上面提交以後,等待審覈便可ubuntu
在後續的上傳jar包時,須要利用gpg進行簽名,下面介紹一下mac的安裝流程vim
推薦用法segmentfault
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
接下來,咱們須要設置一下咱們的maven配置文件setting.xml
,將咱們的用戶信息填寫進去
vim ~/.m2/setting.xml
添加第一步中申請的帳號信息,(用戶名+密碼就是第一步申請的帳號密碼)
# 添加帳號信息 <servers> <server> <id>ossrh</id> <username>user</username> <password>password</password> </server> </servers>
前面的步驟屬於大的環境相關,接下來就須要在咱們的實際項目中,配置必要的信息了,這裏以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看到下面的回覆,通常有下面兩步
接下來登陸 https://oss.sonatype.org/#stagingRepositories 管理咱們上傳的jar包
Staging Repositories
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密鑰沒有找到的問題,這個有多是由於咱們上傳的密鑰尚未同步過去,有延遲,再試一次就能夠了
雖然網上挺多這種教程,可是在實際的操做中,總會遇到一些別人沒有遇到的問題,固然若是沒有遇到問題,那固然是最幸運的事情了;本文主要是爲了記錄jar包上傳的中央倉庫的全過程,作一個概括小結,也方便後續的查閱,固然若是對其餘的小夥伴能有所幫助也是不錯的
在寫本文的時候,已經能夠在中央倉庫搜索到上傳的jar包了
參考文檔
一灰灰的我的博客,記錄全部學習和工做中的博文,歡迎你們前去逛逛
盡信書則不如,以上內容,純屬一家之言,因我的能力有限,不免有疏漏和錯誤之處,如發現bug或者有更好的建議,歡迎批評指正,不吝感激