Maven 中央倉庫提交Jar包全程指南

Maven 中央倉庫提交Jar包全程指南

本文記錄一下將jar上傳到maven中央倉庫的全過程,文中項目依託在github上,使用的是mac環境 (關於maven、jdk的環境配置不屬於本文內容)html

<!-- more -->java

1. sonatype帳號申請

首先咱們須要申請一個帳號,地址爲: https://issues.sonatype.org/secure/Signup!default.jspagit

請記住這個帳號的用戶名 + 密碼,在後續的maven的setting.xml配置文件中須要用到github

帳號申請完畢以後,點擊新建按鈕(若是是由於的話,就是create),提交一個issuemacos

  • 項目:選擇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-transfer
  • SCM URL: 和上面的基本一致,只是多了一個.git

基本上須要配置的東西以下圖,最後點擊新建便可apache

上面提交以後,等待審覈便可ubuntu

2. GPG安裝

在後續的上傳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

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. 一灰灰Bloghttps://liuyueyi.github.io/he...

一灰灰的我的博客,記錄全部學習和工做中的博文,歡迎你們前去逛逛

2. 聲明

盡信書則不如,以上內容,純屬一家之言,因我的能力有限,不免有疏漏和錯誤之處,如發現bug或者有更好的建議,歡迎批評指正,不吝感激

image.png

相關文章
相關標籤/搜索