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

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

本文記錄一下將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-transfer
  • SCM 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>[email protected]</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/hexblog

一灰灰的個人博客,記錄所有學習和工作中的博文,歡迎大家前去逛逛

2. 聲明

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章