天天看點

如何使用maven打包并釋出到中央伺服器

在前一篇的博文中,我們介紹了maven的相關知識,對于maven的認識有了一定的了解,如果還不太熟悉,可以去看一下maven知識快速入門,了解開發中maven常用知識。

今天我們介紹一下maven打包相關的知識點,平時我們使用的大多數類庫,就是在maven的中央伺服器上面,如果我們要把自己的包,釋出到中央伺服器,讓大家都可以使用。這就需要使用到打包的相關知識點,接下我們就進入正題。

打包到中央伺服器主要分為以下的步驟,

- 建立工單

- 生成密匙對

- 設定Maven配置

- 部署和釋出Jar包

- 更新Jar包

一、建立工單

我們需要在Sonatype網站上送出一個工單,首先去https://issues.sonatype.org/secure/Dashboard.jspa網站建立一個工單(Issues),如果沒有賬号就去注冊一個賬号,後面會用到使用者名和密碼。

登入系統後,點選導航上面的Create按鈕,建立一個工單。如圖:

如何使用maven打包并釋出到中央伺服器

填寫詳細的資訊,在新增資訊中有Project和Issue Type選項,這個就按預設的選擇,Community Support - Open Source Project Repository Hosting (OSSRH)以及New Project。主要是指項目的支援更新方式和工單的類型,其次就選擇Summary、Description、Group Id、Project URL、SCM url 等資訊,這裡主要是填寫Jar包的大緻摘要、描述、項目或者組織的唯一标志、工程的位址、管理工程的系統(比如git、svn等)

如何使用maven打包并釋出到中央伺服器
如何使用maven打包并釋出到中央伺服器

這裡注意了Group Id這個一般是網址的位址,資訊完成後,點選Create按鈕,送出工單後,過一會就會有Sonatype系統會詢問你位址是否是你的,這裡需要去回答一下,這樣一般2個小時就會通過了。可以參考一下我原來的工單https://issues.sonatype.org/browse/OSSRH-36043,回複一下

Hi,Thank you for your reply. xxx.xxx is my blog and I own the domain.

這裡的xxx.xxx更改為上面的Group Id,就是指你的網址,也就是項目的父級位址。如果沒有個人的網址,可以使用com.github.username。使用github上面的網址,username換為你自己的名稱即可。

如何使用maven打包并釋出到中央伺服器

當你的工單的狀态為RESOLVED的時候,就可以進行下一步的操作了。

如何使用maven打包并釋出到中央伺服器

注意:當你使用了某個域名後,比如net.anumbrella,則你下次使用時就不用再送出工單了,net.anumbrella.*的子域名都可以直接打包進行送出到中央庫。

二、生成密匙對

這裡需要使用gpg來生成密匙對,如果是windows,這需要下載下傳gpg4win,安裝好就可以使用。下載下傳位址

本文使用的mac環境,是以使用brew來安裝gpg,如果對brew不太熟悉,可以看一下我原來的博文——Homebrew學習及mac下更新php7問題。

使用指令安裝gpg,

brew install gpg

安裝好後使用gpg –version檢視,gpg是否成功。

brew –version
如何使用maven打包并釋出到中央伺服器

安裝完gpg後,就執行

gpg –gen-key

這裡是采集密匙,輸入使用者名和郵箱,其他的值可以使用預設值,然後輸入Passphrase的值,這個值需要記住,這個相當于密鑰的密碼,釋出過程中進行簽名操作的時候會用到。

如何使用maven打包并釋出到中央伺服器

檢視公匙指令:

gpg –list-keys
如何使用maven打包并釋出到中央伺服器

到這裡生成密匙的操作就完成了。

三、設定Maven配置

在項目的pom.xml檔案中,加入如下配置:

<parent>
    <groupId>org.sonatype.oss</groupId>
    <artifactId>oss-parent</artifactId>
    <version>7</version>
  </parent>
           

以及下面的配置,包括執照、scm和developers,

<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>

  <scm>
    <url>https://github.com/Shuyun123/seaweedfs-java-client</url>
    <connection>[email protected]:Shuyun123/seaweedfs-java-client.git</connection>
    <developerConnection>http://www.anumbrella.net</developerConnection>
  </scm>

  <developers>
    <developer>
      <name>anumbrella</name>
      <email>[email protected]</email>
      <url>http://www.anumbrella.net</url>
    </developer>
  </developers>
           

scm主要是項目位址,而developers則是開發者的相關資訊。同時需要在pom.xml檔案的build下加入maven插件配置如下:

<build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.6.2</version>
        <configuration>
          <source>1.8</source>
          <target>1.8</target>
        </configuration>
      </plugin>
      <!--配置生成源碼包-->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-source-plugin</artifactId>
        <version>3.0.1</version>
        <executions>
          <execution>
            <id>attach-sources</id>
            <goals>
              <goal>jar</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
           

配置好項目的pom.xml檔案後,然後就對Maven的settings.xml檔案進行配置,在settings.xml檔案中加入下面的配置:

<servers>
  <server>
    <id>sonatype-nexus-snapshots</id>
    <username>Sonatype網站的賬号</username>
    <password>Sonatype網站的密碼</password>
  </server>
  <server>
    <id>sonatype-nexus-staging</id>
    <username>Sonatype網站的賬号</username>
    <password>Sonatype網站的密碼</password>
  </server>
</servers>
           

username和password就是在Sonatype上注冊的使用者名和密碼。

四、部署和釋出Jar包

在配置好檔案後,切換目錄到項目的pom.xml目錄下,然後執行如下指令:

接着如果沒出現錯誤就忽略該步驟繼續執行,作者出現了如下錯誤:

如何使用maven打包并釋出到中央伺服器

就是

gpg: 簽名時失敗: Inappropriate ioctl for device

gpg: signing failed: Inappropriate ioctl for device

如何使用maven打包并釋出到中央伺服器

需要在~/.gnupg目錄下,建立檔案gpg.conf和gpg-agent.conf,如果沒有該檔案就建立一個。同時在gpg.conf下添加如下代碼:

use-agent
pinentry-mode loopback
           

在gpg-agent.conf下添加如下代碼:

然後再重新執行上面的步驟,執行中還是要再輸入passphrase密碼,就是gpg密匙密碼。如果沒問題就可以得到後面的結果,如下:

如何使用maven打包并釋出到中央伺服器

如果還有報錯,可以執行

mvn help:effective-settings
           

用檢視了下目前生效的settings.xml檔案内容,再分析一些問題所在。

将公鑰釋出到PGP密鑰伺服器,可使用本地的私鑰來對上傳構件進行數字簽名,而下載下傳該構件的使用者可通過上傳的公鑰來驗證簽名,也就是說,大家可以驗證這個構件是否由本人上傳的,因為有可能該構件被壞人給篡改了。

執行gpg –list-keys可以檢視公匙,

如何使用maven打包并釋出到中央伺服器

這裡我的公匙就是C7FB53397……….這一大串字元,然後執行釋出上傳指令:

如何使用maven打包并釋出到中央伺服器

釋出Jar包

登入https://oss.sonatype.org/#stagingRepositories系統,輸入Sonatype的賬号和密碼,然後檢視送出上去的Jar包。

如何使用maven打包并釋出到中央伺服器

然後依次點選上方的Close–>Confirm,這将會彈出類似于下面的對話框,在其中輸入我們Jar包的描述資訊,這個資訊将會在Maven搜尋結果當作簡介介紹我們Jar包的,是以建議輸的詳細點。

如何使用maven打包并釋出到中央伺服器

當狀态變成closed後,執行上方的Release–>Confirm,同樣會彈出一個類似于上面的對話框,我們還是輸入那些介紹資訊即可,

如何使用maven打包并釋出到中央伺服器

當這步執行完之後,構件将會自動删除,我們可以在welcome檢視檔案

如何使用maven打包并釋出到中央伺服器

并經過幾小時後便可以在Maven中央倉庫搜尋到(https://search.maven.org)。

如何使用maven打包并釋出到中央伺服器

我們也可以在http://repo1.maven.org/maven2/中找到具體的項目目錄位址。

如何使用maven打包并釋出到中央伺服器

五、更新Jar包

當我們要更改了代碼後,要更新版本,我們隻需要更新項目工程代碼,并修改pom.xml檔案裡面的版本号,最後重新執行上面的部署和釋出Jar包步驟即可。