1. 程式人生 > >Maven入門:使用Nexus搭建Maven私服及上傳下載jar包 Maven入門:使用Nexus搭建Maven私服及上傳下載jar包

Maven入門:使用Nexus搭建Maven私服及上傳下載jar包 Maven入門:使用Nexus搭建Maven私服及上傳下載jar包

Maven入門:使用Nexus搭建Maven私服及上傳下載jar包

一. 私服搭建及配置

1 . 私服簡介

  私服是架設在區域網的一種特殊的遠端倉庫,目的是代理遠端倉庫及部署第三方構件。有了私服之後,當 Maven 需要下載構件時,直接請求私服,私服上存在則下載到本地倉庫;否則,私服請求外部的遠端倉庫,將構件下載到私服,再提供給本地倉庫下載。

                                                

  我們可以使用專門的 Maven 倉庫管理軟體來搭建私服,比如:Apache ArchivaArtifactorySonatype Nexus。這裡我們使用 Sonatype Nexus。

2 . 安裝Nexus

2 . 1 . 下載Nexus

  Nexus 專業版是需要付費的,這裡我們下載開源版 Nexus OSS。下載地址:http://www.sonatype.org/nexus/go,最新的為OSS3.X,我這裡選擇穩定版本2.x,點選後自動下載

 

 

2 . 2 . 使用bundle安裝包安裝Nexus

解壓安裝包nexus-2.14.5-02.zip,開啟命令提示符,進入nexus-2.14.5-02/bin目錄 (為方便啟動和退出Nexus,可將bin目錄新增到環境變數),

1.執行nexus命令

2.執行 nexus install 將Nexus安裝為Windows服務

 

3.開啟瀏覽器,訪問:http://localhost:8081/nexus/:

點選右上角 Log In,使用使用者名稱:admin ,密碼:admin123 登入,可使用更多功能:

 

4 . Nexus預置的倉庫

4.1  型別介紹

    登陸Nexus,在左邊選單欄裡選擇Repositories,然後會出現右邊的畫面,右邊上半部分是列出來的repository,黑體字是型別為group的repository。

    這裡簡單介紹下幾種repository的型別:

    Ø  hosted,本地倉庫,通常我們會部署自己的構件到這一型別的倉庫。比如公司的第二方庫。

    Ø  proxy,代理倉庫,它們被用來代理遠端的公共倉庫,如maven中央倉庫。

    Ø  group,倉庫組,用來合併多個hosted/proxy倉庫,當你的專案希望在多個repository使用資源時就不需要多次引用了,只需要引用一個group即可。

    

 

              

4.2  管理本地倉庫

    我們前面講到型別為hosted的為本地倉庫,Nexus預置了3個本地倉庫,分別是Releases, Snapshots, 3rd Party. 分別講一下這三個預置的倉庫都是做什麼用的:

  Releases:

     這裡存放我們自己專案中釋出的構建, 通常是Release版本的, 比如我們自己做了一個FTP Server的專案, 生成的構件為ftpserver.war, 我們就可以把這個構建釋出到Nexus的Releases本地倉庫. 關於符合釋出後面會有介紹.

  Snapshots:

     這個倉庫非常的有用, 它的目的是讓我們可以釋出那些非release版本, 非穩定版本, 比如我們在trunk下開發一個專案,在正式release之前你可能需要臨時釋出一個版本給你的同伴使用, 因為你的同伴正在依賴你的模組開發, 那麼這個時候我們就可以釋出Snapshot版本到這個倉庫, 你的同伴就可以通過簡單的命令來獲取和使用這個臨時版本.

  3rd Party:

    顧名思義, 第三方庫, 你可能會問不是有中央倉庫來管理第三方庫嘛,沒錯, 這裡的是指可以讓你新增自己的第三方庫, 比如有些構件在中央倉庫是不存在的. 比如你在中央倉庫找不到Oracle 的JDBC驅動, 這個時候我們就需要自己新增到3rdparty倉庫。

 

 

4.3  在Nexus為自己的專案手動單獨建庫

  1. 建庫,Add-- >HostedRepository

    

 

按照下圖填寫資訊,注意圈的地方,填寫完成後save

      2. 然後選擇PublicRepositories,開啟configuration選項卡

   3.  將自己建立的倉庫新增到group,如圖從右側移到左側,點選save,儲存。至此,已經成功搭建好我們自定義的倉庫了。

   注:如果需要你還可以建立一個倉庫組,在Repositories選單處選add-->Repository Group即可

5.  在Nexus建立賬戶

     

     最後點選儲存。當然自己也可以建立角色,分配許可權等,這裡直接用已有的角色,省略了一些步驟。

 二. 利用搭建的私服,進行上傳和下載jar包

    1. 遠端倉庫的認證

大部分公共的遠端倉庫無須認證就可以直接訪問,但我們在平時的開發中往往會架設自己的Maven遠端倉庫,出於安全方面的考慮,我們需要提供認證資訊才能訪問這樣的遠端倉庫。配置認證資訊和配置遠端倉庫不同,遠端倉庫可以配置在settings.xml檔案中,也可直接在pom.xml中配置,後面會分別舉例說明,但是認證資訊必須配置在settings.xml檔案中。在settings.xml中配置認證資訊更為安全。如下:在settings.xml中配置<servers>節點,用的賬號為上面我們建立的賬戶。

複製程式碼 複製程式碼
 1 <settings>
 2  2     ...
 3  3     <!--配置遠端倉庫認證資訊-->
 4  4     <servers>
 5  5         <server>
 6  6             <id>bbsnexus</id>
 7  7             <username>licui</username>
 8  8             <password>a111111</password>
 9  9         </server>
10 10     </servers>
11 11     ...
12 12 </settings>
複製程式碼 複製程式碼

上面程式碼我們配置了一個id為bbsnexus的遠端倉庫認證資訊。Maven使用settings.xml檔案中的servers元素及其子元素server配置倉庫認證資訊。認證使用者名稱為licui,認證密碼為a111111。這裡的關鍵是id元素,id沒有要求,隨便定義,但是後面配置遠端倉庫的id必須和這裡的id保持一致。正是這個id將認證資訊與倉庫配置聯絡在了一起。

   2.  配置遠端倉庫

        如果只有一個專案,可以配置在專案的pom檔案中:

  

 

 

  如果有多個專案時,可以將如上配置放到Maven的Settings檔案中:

  

 

repository:在repositories元素下,可以使用repository子元素宣告一個或者多個遠端倉庫。

id:倉庫宣告的唯一id,尤其需要注意的是,Maven自帶的中央倉庫使用的id為central,如果其他倉庫宣告也使用該id,就會覆蓋中央倉庫的配置。

name:倉庫的名稱,讓我們直觀方便的知道倉庫是哪個,暫時沒發現其他太大的含義。

url:指向了倉庫的地址,一般來說,該地址都基於http協議,Maven使用者都可以在瀏覽器中開啟倉庫地址瀏覽構件。

releases和snapshots:用來控制Maven對於釋出版構件和快照版構件的下載許可權。需要注意的是enabled子元素,該例中releases的enabled值為true,表示開啟JBoss倉庫的釋出版本下載支援,而snapshots的enabled值為false,表示關閉JBoss倉庫的快照版本的下載支援。根據該配置,Maven只會從JBoss倉庫下載釋出版的構件,而不會下載快照版的構件。

layout:元素值default表示倉庫的佈局是Maven2及Maven3的預設佈局,而不是Maven1的佈局。基本不會用到Maven1的佈局。

其他:對於releases和snapshots來說,除了enabled,它們還包含另外兩個子元素updatePolicy和checksumPolicy。

元素updatePolicy用來配置Maven從遠處倉庫檢查更新的頻率,預設值是daily,表示Maven每天檢查一次。其他可用的值包括:never-從不檢查更新;always-每次構建都檢查更新;interval:X-每隔X分鐘檢查一次更新(X為任意整數)。

元素checksumPolicy用來配置Maven檢查校驗和檔案的策略。當構建被部署到Maven倉庫中時,會同時部署對應的檢驗和檔案。在下載構件的時候,Maven會驗證校驗和檔案,如果校驗和驗證失敗,當checksumPolicy的值為預設的warn時,Maven會在執行構建時輸出警告資訊,其他可用的值包括:fail-Maven遇到校驗和錯誤就讓構建失敗;ignore-使Maven完全忽略校驗和錯誤。

 

3.    配置倉庫映象

  預設的,如果本地倉庫找不到依賴的構件,這時需要東西時先到Nexus上找,如果發現Nexus服務關閉後,會自動到中央倉庫找。

  如果我們想覆蓋中央倉庫的預設地址,強制依賴的東西都到Nexus中去找,即使Nexus關閉也不會到中央工廠去下載:

  修改Maven的Settings檔案:

  

至此,我們已經可以從自己搭建的私服下載jar了。

4.上傳jar包到遠端倉庫

1)將已有的專案打成jar包上傳到私服伺服器

首先需要在pom.xml中配置上傳倉庫的地址,配置distributionManagement元素,倉庫地址指向前面自定義的倉庫bbsid

複製程式碼 複製程式碼
 1 <distributionManagement>
 2         <repository>
 3             <id>bbsnexus</id>
 4             <name>bbsidrepository</name>
 5             <url>http://127.0.0.1:8081/nexus/content/repositories/bbsid</url>
 6         </repository>
 7 </distributionManagement>
複製程式碼 複製程式碼

distributionManagement包含repository和snapshotRepository子元素,前者表示釋出版本(穩定版本)jar包的倉庫,後者表示快照版本(開發測試版本)的倉庫。

這兩個元素都需要配置id、name和url,id為遠端倉庫的唯一標識,很重要,name只是為了方便人閱讀,關鍵的url表示該倉庫的地址。

往遠端倉庫部署jar包的時候,需要認證,配置認證的方式為id,一定要與前面settings中server的id保持一致。

如果專案當前的版本是快照版本,則部署到快照版本的倉庫地址,否則就部署到釋出版本的倉庫地址,因為這裡只是測試演示,前面只建立了Release版本的倉庫bbsid,所以省略了snapshotRepository。

配置正確後,定位到要上傳的專案目錄,執行命令mvn clean deploy,Maven就會直接將專案打包生成的jar包部署到配置對應的遠端倉庫中。

2)上傳第三方jar包到遠端倉庫

      方式一  (假設釋出倉庫為bbsid,釋出Jar包為zbb-sms-0.0.1.jar):

      A.  settings.xml中配置認證資訊。

      B. 定位到要上傳的jar包的目錄,執行“ mvn deploy:deploy-file -DgroupId=com.zxp.test -DartifactId=sms -Dversion=1.0 -Dpackaging=jar -Dfile=zbb-sms-0.0.1.jar -Durl=http://127.0.0.1:8081/nexus/content/repositories/bbsid -DrepositoryId=bbsnexus”命令。

        說明:deploy:deploy-file表示釋出獨立的檔案。

                 groupId、artifactId和version可根據需要設定。(我們要傳的包為zbb-sms-0.0.1.jar,但是命令裡指定-Dversion=1.0-DartifactId=sms,所以最終上傳到倉庫後的名稱為sms-1.0.jar

                 url為Nexus伺服器中需要上傳的倉庫路徑。

                repositoryId與server的id必須一致。

上傳到倉庫中的結果如下圖示:

方式二 Nexus控制檯直接上傳jar包 (假設釋出倉庫為bbsid,釋出Jar包為mysql-connector-java-5.1.43.jar):

 在Repositories列表中選擇Releases,點Artifact Upload,指定GAV Definition為“GAV Parameters”,然後輸入相應的groupId、artifactId和version、Packaging,再點選“Select Artifact(s) to Upload...”選擇指定的Jar檔案,點選“Add ActifactId”新增到Actifacts框,最後點“Upload Artifact(s)”即可。

上傳到倉庫中的jar如下圖示:

一. 私服搭建及配置

1 . 私服簡介

  私服是架設在區域網的一種特殊的遠端倉庫,目的是代理遠端倉庫及部署第三方構件。有了私服之後,當 Maven 需要下載構件時,直接請求私服,私服上存在則下載到本地倉庫;否則,私服請求外部的遠端倉庫,將構件下載到私服,再提供給本地倉庫下載。

                                                

  我們可以使用專門的 Maven 倉庫管理軟體來搭建私服,比如:Apache ArchivaArtifactorySonatype Nexus。這裡我們使用 Sonatype Nexus。

2 . 安裝Nexus

2 . 1 . 下載Nexus

  Nexus 專業版是需要付費的,這裡我們下載開源版 Nexus OSS。下載地址:http://www.sonatype.org/nexus/go,最新的為OSS3.X,我這裡選擇穩定版本2.x,點選後自動下載

 

 

2 . 2 . 使用bundle安裝包安裝Nexus

解壓安裝包nexus-2.14.5-02.zip,開啟命令提示符,進入nexus-2.14.5-02/bin目錄 (為方便啟動和退出Nexus,可將bin目錄新增到環境變數),

1.執行nexus命令

2.執行 nexus install 將Nexus安裝為Windows服務

 

3.開啟瀏覽器,訪問:http://localhost:8081/nexus/:

點選右上角 Log In,使用使用者名稱:admin ,密碼:admin123 登入,可使用更多功能:

 

4 . Nexus預置的倉庫

4.1  型別介紹

    登陸Nexus,在左邊選單欄裡選擇Repositories,然後會出現右邊的畫面,右邊上半部分是列出來的repository,黑體字是型別為group的repository。

    這裡簡單介紹下幾種repository的型別:

    Ø  hosted,本地倉庫,通常我們會部署自己的構件到這一型別的倉庫。比如公司的第二方庫。

    Ø  proxy,代理倉庫,它們被用來代理遠端的公共倉庫,如maven中央倉庫。

    Ø  group,倉庫組,用來合併多個hosted/proxy倉庫,當你的專案希望在多個repository使用資源時就不需要多次引用了,只需要引用一個group即可。

    

 

              

4.2  管理本地倉庫

    我們前面講到型別為hosted的為本地倉庫,Nexus預置了3個本地倉庫,分別是Releases, Snapshots, 3rd Party. 分別講一下這三個預置的倉庫都是做什麼用的:

  Releases:

     這裡存放我們自己專案中釋出的構建, 通常是Release版本的, 比如我們自己做了一個FTP Server的專案, 生成的構件為ftpserver.war, 我們就可以把這個構建釋出到Nexus的Releases本地倉庫. 關於符合釋出後面會有介紹.

  Snapshots:

     這個倉庫非常的有用, 它的目的是讓我們可以釋出那些非release版本, 非穩定版本, 比如我們在trunk下開發一個專案,在正式release之前你可能需要臨時釋出一個版本給你的同伴使用, 因為你的同伴正在依賴你的模組開發, 那麼這個時候我們就可以釋出Snapshot版本到這個倉庫, 你的同伴就可以通過簡單的命令來獲取和使用這個臨時版本.

  3rd Party:

    顧名思義, 第三方庫, 你可能會問不是有中央倉庫來管理第三方庫嘛,沒錯, 這裡的是指可以讓你新增自己的第三方庫, 比如有些構件在中央倉庫是不存在的. 比如你在中央倉庫找不到Oracle 的JDBC驅動, 這個時候我們就需要自己新增到3rdparty倉庫。

 

 

4.3  在Nexus為自己的專案手動單獨建庫

  1. 建庫,Add-- >HostedRepository

    

 

按照下圖填寫資訊,注意圈的地方,填寫完成後save

      2. 然後選擇PublicRepositories,開啟configuration選項卡

   3.  將自己建立的倉庫新增到group,如圖從右側移到左側,點選save,儲存。至此,已經成功搭建好我們自定義的倉庫了。

   注:如果需要你還可以建立一個倉庫組,在Repositories選單處選add-->Repository Group即可

5.  在Nexus建立賬戶

     

     最後點選儲存。當然自己也可以建立角色,分配許可權等,這裡直接用已有的角色,省略了一些步驟。

 二. 利用搭建的私服,進行上傳和下載jar包

    1. 遠端倉庫的認證

大部分公共的遠端倉庫無須認證就可以直接訪問,但我們在平時的開發中往往會架設自己的Maven遠端倉庫,出於安全方面的考慮,我們需要提供認證資訊才能訪問這樣的遠端倉庫。配置認證資訊和配置遠端倉庫不同,遠端倉庫可以配置在settings.xml檔案中,也可直接在pom.xml中配置,後面會分別舉例說明,但是認證資訊必須配置在settings.xml檔案中。在settings.xml中配置認證資訊更為安全。如下:在settings.xml中配置<servers>節點,用的賬號為上面我們建立的賬戶。

複製程式碼 複製程式碼
 1 <settings>
 2  2     ...
 3  3     <!--配置遠端倉庫認證資訊-->
 4  4     <servers>
 5  5         <server>
 6  6             <id>bbsnexus</id>
 7  7             <username>licui</username>
 8  8             <password>a111111</password>
 9  9         </server>
10 10     </servers>
11 11     ...
12 12 </settings>
複製程式碼 複製程式碼

上面程式碼我們配置了一個id為bbsnexus的遠端倉庫認證資訊。Maven使用settings.xml檔案中的servers元素及其子元素server配置倉庫認證資訊。認證使用者名稱為licui,認證密碼為a111111。這裡的關鍵是id元素,id沒有要求,隨便定義,但是後面配置遠端倉庫的id必須和這裡的id保持一致。正是這個id將認證資訊與倉庫配置聯絡在了一起。

   2.  配置遠端倉庫

        如果只有一個專案,可以配置在專案的pom檔案中:

  

 

 

  如果有多個專案時,可以將如上配置放到Maven的Settings檔案中:

  

 

repository:在repositories元素下,可以使用repository子元素宣告一個或者多個遠端倉庫。

id:倉庫宣告的唯一id,尤其需要注意的是,Maven自帶的中央倉庫使用的id為central,如果其他倉庫宣告也使用該id,就會覆蓋中央倉庫的配置。

name:倉庫的名稱,讓我們直觀方便的知道倉庫是哪個,暫時沒發現其他太大的含義。

url:指向了倉庫的地址,一般來說,該地址都基於http協議,Maven使用者都可以在瀏覽器中開啟倉庫地址瀏覽構件。

releases和snapshots:用來控制Maven對於釋出版構件和快照版構件的下載許可權。需要注意的是enabled子元素,該例中releases的enabled值為true,表示開啟JBoss倉庫的釋出版本下載支援,而snapshots的enabled值為false,表示關閉JBoss倉庫的快照版本的下載支援。根據該配置,Maven只會從JBoss倉庫下載釋出版的構件,而不會下載快照版的構件。

layout:元素值default表示倉庫的佈局是Maven2及Maven3的預設佈局,而不是Maven1的佈局。基本不會用到Maven1的佈局。

其他:對於releases和snapshots來說,除了enabled,它們還包含另外兩個子元素updatePolicy和checksumPolicy。

元素updatePolicy用來配置Maven從遠處倉庫檢查更新的頻率,預設值是daily,表示Maven每天檢查一次。其他可用的值包括:never-從不檢查更新;always-每次構建都檢查更新;interval:X-每隔X分鐘檢查一次更新(X為任意整數)。

元素checksumPolicy用來配置Maven檢查校驗和檔案的策略。當構建被部署到Maven倉庫中時,會同時部署對應的檢驗和檔案。在下載構件的時候,Maven會驗證校驗和檔案,如果校驗和驗證失敗,當checksumPolicy的值為預設的warn時,Maven會在執行構建時輸出警告資訊,其他可用的值包括:fail-Maven遇到校驗和錯誤就讓構建失敗;ignore-使Maven完全忽略校驗和錯誤。

 

3.    配置倉庫映象

  預設的,如果本地倉庫找不到依賴的構件,這時需要東西時先到Nexus上找,如果發現Nexus服務關閉後,會自動到中央倉庫找。

  如果我們想覆蓋中央倉庫的預設地址,強制依賴的東西都到Nexus中去找,即使Nexus關閉也不會到中央工廠去下載:

  修改Maven的Settings檔案:

  

至此,我們已經可以從自己搭建的私服下載jar了。

4.上傳jar包到遠端倉庫

1)將已有的專案打成jar包上傳到私服伺服器

首先需要在pom.xml中配置上傳倉庫的地址,配置distributionManagement元素,倉庫地址指向前面自定義的倉庫bbsid

複製程式碼 複製程式碼
 1 <distributionManagement>
 2         <repository>
 3             <id>bbsnexus</id>
 4             <name>bbsidrepository</name>
 5             <url>http://127.0.0.1:8081/nexus/content/repositories/bbsid</url>
 6         </repository>
 7 </distributionManagement>
複製程式碼 複製程式碼

distributionManagement包含repository和snapshotRepository子元素,前者表示釋出版本(穩定版本)jar包的倉庫,後者表示快照版本(開發測試版本)的倉庫。

這兩個元素都需要配置id、name和url,id為遠端倉庫的唯一標識,很重要,name只是為了方便人閱讀,關鍵的url表示該倉庫的地址。

往遠端倉庫部署jar包的時候,需要認證,配置認證的方式為id,一定要與前面settings中server的id保持一致。

如果專案當前的版本是快照版本,則部署到快照版本的倉庫地址,否則就部署到釋出版本的倉庫地址,因為這裡只是測試演示,前面只建立了Release版本的倉庫bbsid,所以省略了snapshotRepository。

配置正確後,定位到要上傳的專案目錄,執行命令mvn clean deploy,Maven就會直接將專案打包生成的jar包部署到配置對應的遠端倉庫中。

2)上傳第三方jar包到遠端倉庫

      方式一  (假設釋出倉庫為bbsid,釋出Jar包為zbb-sms-0.0.1.jar):

      A.  settings.xml中配置認證資訊。

      B. 定位到要上傳的jar包的目錄,執行“ mvn deploy:deploy-file -DgroupId=com.zxp.test -DartifactId=sms -Dversion=1.0 -Dpackaging=jar -Dfile=zbb-sms-0.0.1.jar -Durl=http://127.0.0.1:8081/nexus/content/repositories/bbsid -DrepositoryId=bbsnexus”命令。

        說明:deploy:deploy-file表示釋出獨立的檔案。

                 groupId、artifactId和version可根據需要設定。(我們要傳的包為zbb-sms-0.0.1.jar,但是命令裡指定-Dversion=1.0-DartifactId=sms,所以最終上傳到倉庫後的名稱為sms-1.0.jar

                 url為Nexus伺服器中需要上傳的倉庫路徑。

                repositoryId與server的id必須一致。

上傳到倉庫中的結果如下圖示:

方式二 Nexus控制檯直接上傳jar包 (假設釋出倉庫為bbsid,釋出Jar包為mysql-connector-java-5.1.43.jar):

 在Repositories列表中選擇Releases,點Artifact Upload,指定GAV Definition為“GAV Parameters”,然後輸入相應的groupId、artifactId和version、Packaging,再點選“Select Artifact(s) to Upload...”選擇指定的Jar檔案,點選“Add ActifactId”新增到Actifacts框,最後點“Upload Artifact(s)”即可。

上傳到倉庫中的jar如下圖示: