在前一篇的博文中,我們介紹了maven的相關知識,對于maven的認識有了一定的了解,如果還不太熟悉,可以去看一下maven知識快速入門,了解開發中maven常用知識。
今天我們介紹一下maven打包相關的知識點,平時我們使用的大多數類庫,就是在maven的中央伺服器上面,如果我們要把自己的包,釋出到中央伺服器,讓大家都可以使用。這就需要使用到打包的相關知識點,接下我們就進入正題。
打包到中央伺服器主要分為以下的步驟,
- 建立工單
- 生成密匙對
- 設定Maven配置
- 部署和釋出Jar包
- 更新Jar包
一、建立工單
我們需要在Sonatype網站上送出一個工單,首先去https://issues.sonatype.org/secure/Dashboard.jspa網站建立一個工單(Issues),如果沒有賬号就去注冊一個賬号,後面會用到使用者名和密碼。
登入系統後,點選導航上面的Create按鈕,建立一個工單。如圖:
填寫詳細的資訊,在新增資訊中有Project和Issue Type選項,這個就按預設的選擇,Community Support - Open Source Project Repository Hosting (OSSRH)以及New Project。主要是指項目的支援更新方式和工單的類型,其次就選擇Summary、Description、Group Id、Project URL、SCM url 等資訊,這裡主要是填寫Jar包的大緻摘要、描述、項目或者組織的唯一标志、工程的位址、管理工程的系統(比如git、svn等)
這裡注意了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換為你自己的名稱即可。
當你的工單的狀态為RESOLVED的時候,就可以進行下一步的操作了。
注意:當你使用了某個域名後,比如net.anumbrella,則你下次使用時就不用再送出工單了,net.anumbrella.*的子域名都可以直接打包進行送出到中央庫。
二、生成密匙對
這裡需要使用gpg來生成密匙對,如果是windows,這需要下載下傳gpg4win,安裝好就可以使用。下載下傳位址
本文使用的mac環境,是以使用brew來安裝gpg,如果對brew不太熟悉,可以看一下我原來的博文——Homebrew學習及mac下更新php7問題。
使用指令安裝gpg,
brew install gpg
安裝好後使用gpg –version檢視,gpg是否成功。
brew –version
安裝完gpg後,就執行
gpg –gen-key
這裡是采集密匙,輸入使用者名和郵箱,其他的值可以使用預設值,然後輸入Passphrase的值,這個值需要記住,這個相當于密鑰的密碼,釋出過程中進行簽名操作的時候會用到。
檢視公匙指令:
gpg –list-keys
到這裡生成密匙的操作就完成了。
三、設定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目錄下,然後執行如下指令:
接着如果沒出現錯誤就忽略該步驟繼續執行,作者出現了如下錯誤:
就是
gpg: 簽名時失敗: Inappropriate ioctl for device
gpg: signing failed: Inappropriate ioctl for device
需要在~/.gnupg目錄下,建立檔案gpg.conf和gpg-agent.conf,如果沒有該檔案就建立一個。同時在gpg.conf下添加如下代碼:
use-agent
pinentry-mode loopback
在gpg-agent.conf下添加如下代碼:
然後再重新執行上面的步驟,執行中還是要再輸入passphrase密碼,就是gpg密匙密碼。如果沒問題就可以得到後面的結果,如下:
如果還有報錯,可以執行
mvn help:effective-settings
用檢視了下目前生效的settings.xml檔案内容,再分析一些問題所在。
将公鑰釋出到PGP密鑰伺服器,可使用本地的私鑰來對上傳構件進行數字簽名,而下載下傳該構件的使用者可通過上傳的公鑰來驗證簽名,也就是說,大家可以驗證這個構件是否由本人上傳的,因為有可能該構件被壞人給篡改了。
執行gpg –list-keys可以檢視公匙,
這裡我的公匙就是C7FB53397……….這一大串字元,然後執行釋出上傳指令:
釋出Jar包
登入https://oss.sonatype.org/#stagingRepositories系統,輸入Sonatype的賬号和密碼,然後檢視送出上去的Jar包。
然後依次點選上方的Close–>Confirm,這将會彈出類似于下面的對話框,在其中輸入我們Jar包的描述資訊,這個資訊将會在Maven搜尋結果當作簡介介紹我們Jar包的,是以建議輸的詳細點。
當狀态變成closed後,執行上方的Release–>Confirm,同樣會彈出一個類似于上面的對話框,我們還是輸入那些介紹資訊即可,
當這步執行完之後,構件将會自動删除,我們可以在welcome檢視檔案
并經過幾小時後便可以在Maven中央倉庫搜尋到(https://search.maven.org)。
我們也可以在http://repo1.maven.org/maven2/中找到具體的項目目錄位址。
五、更新Jar包
當我們要更改了代碼後,要更新版本,我們隻需要更新項目工程代碼,并修改pom.xml檔案裡面的版本号,最後重新執行上面的部署和釋出Jar包步驟即可。