Nexus的簡單使用及setting.xml、pom.xml配置

Nexus的簡單使用及setting.xml、pom.xml配置

具體私庫搭建可自行百度如:

https://blog.csdn.net/luozhonghua2014/article/details/81583510

本文主要簡單介紹nexus及項目中的使用

Nexus介紹

Nexus是一個強大的Maven倉庫管理器,它極大地簡化了本地內部倉庫的維護和外部倉庫的訪問。

Nexus在代理遠程倉庫的同時維護本地倉庫,以降低中央倉庫的負荷,節省外網帶寬和時間,Nexus私服就可以滿足這樣的需要。

Nexus是一套“開箱即用”的系統不需要數據庫,它使用文件系統加Lucene來組織數據。 

Nexus支持WebDAV與LDAP安全身份認證。 

Nexus還提供了強大的倉庫管理功能,構件搜索功能,它基於REST,友好的UI是一個extjs的REST客戶端,它佔用較少的內存,基於簡單文件系統而非數據庫。

 

爲什麼要構建Nexus私服?

如果沒有Nexus私服,我們所需的所有構件都需要通過maven的中央倉庫和第三方的Maven倉庫下載到本地,而一個團隊中的所有人都重複的從maven倉庫下載構件無疑加大了倉庫的負載和浪費了外網帶寬,如果網速慢的話,還會影響項目的進程。很多情況下項目的開發都是在內網進行的,連接不到maven倉庫怎麼辦呢?開發的公共構件怎麼讓其它項目使用?這個時候我們不得不爲自己的團隊搭建屬於自己的maven私服,這樣既節省了網絡帶寬也會加速項目搭建的進程,當然前提條件就是你的私服中擁有項目所需的所有構件。

 

總之,在本地構建nexus私服的好處有:

1)加速構建;

2)節省帶寬;

3)節省中央maven倉庫的帶寬;

4)穩定(應付一旦中央服務器出問題的情況);

5)控制和審計;

6)能夠部署第三方構件;

7)可以建立本地內部倉庫;

8)可以建立公共倉庫

這些優點使得Nexus日趨成爲最流行的Maven倉庫管理器。

 

搭建Nexus私庫需要配置Java環境

 

Nexus默認的倉庫類型主要有以下種:

   group(倉庫組類型):又叫組倉庫,用於方便開發人員自己設定的倉庫;

   hosted(宿主類型):內部項目的發佈倉庫(內部開發人員,發佈上去存放的倉庫);

   proxy(代理類型):從遠程中央倉庫中尋找數據的倉庫(可以點擊對應的倉庫的Configuration頁簽下Remote Storage Location屬性的值即被代理的遠程倉庫的路徑);

 

maven-central:maven中央庫,默認從https://repo1.maven.org/maven2/拉取jar 

maven-releases:私庫發行版(正式版本),用來部署管理內部的發佈版本構件的宿主類型倉庫

maven-snapshots:私庫快照(調試版本),用來部署管理內部的快照版本構件的宿主類型倉庫

maven-public:倉庫分組,把上面三個倉庫組合在一起對外提供服務,在本地maven基礎配置settings.xml中使用。

 

倉庫組通常包含了多個代理倉庫和宿主倉庫,在項目中只要引入倉庫組就可以下載到代理倉庫和宿主倉庫中的包,也可以直接從宿主倉庫、代理倉庫下載。

 

自定義構建的倉庫組代理倉庫的順序爲(可理解爲檢索jar的順序):releases,snapshots,3rd party,central。

 

Nexus默認的端口是8081,可以在etc/nexus-default.properties配置中修改。

Nexus默認的用戶名密碼是admin/admin123

 

使用Nexus時首先需要修改maven-releases倉庫的Deployment pollcy爲:Allow redeploy(登陸後纔有設置按鈕)

需要打包上傳的模塊下的pom.xml文件中添加如下配置(配置介紹在篇底):

<distributionManagement>
    <repository>
        <id>nexus</id>
        <name>maven-releases</name>
        <url>http://localhost:8081/repository/maven-releases/</url>
    </repository>
    <snapshotRepository>
        <id>nexus</id>
        <name>maven-snapshot</name>
        <url>http://localhost:8081/repository/maven-snapshots/</url>
    </snapshotRepository>
</distributionManagement>

 

name自定義,url對應maven-releases、maven-snapshots的地址

根據項目版本號判斷上傳相應的倉庫如:

<version>0.0.1-SNAPSHOT</version>管理調試版本的倉庫:maven-snapshots

<version>0.0.1</version>管理正式版本的倉庫:maven-releases

 

 

Maven文件setting.xml中servers標籤內添加如下配置:

<server>

  <id>nexus</id>

  <username>admin</username>

  <password>admin123</password>

</server>

 

id對應pom.xml中id,用戶名密碼爲nexus的用戶密碼

 

打包上傳到私庫(IDEA中):

 

需要下載用戶上傳私庫中的jar時,在相關項目的需要依賴的模塊下pom.xml添加如下配置:

<repositories>
    <repository>
        <id>nexus</id>
        <name>maven-public</name>
        <url>http://localhost:8081/repository/maven-public/</url>
    </repository>
</repositories>

url爲組倉庫的地址

 

及相關依賴如:

<dependency>
    <groupId>com.chengjia</groupId>
    <artifactId>provider-service</artifactId>
    <version>0.0.1-SNAPSHOT</version>
</dependency>

 

pom.xml文件中<distributiomManagement>配置

<!-- 使用分發管理將本項目打成jar包,直接上傳到指定服務器 -->

<distributionManagement>

<!--正式版本-->
    <repository>

<!-- nexus服務器中用戶名:在settings.xml中<server>的id-->
        <id>nexus</id>

<!-- 這個名稱自己定義 -->
        <name>maven-releases</name>

<!-- 上傳地址 -->
        <url>http://localhost:8081/repository/maven-releases/</url>
    </repository>

<!--快照,調試版-->
    <snapshotRepository>
        <id>nexus</id>
        <name>maven-snapshot</name>
        <url>http://localhost:8081/repository/maven-snapshots/</url>
    </snapshotRepository>
</distributionManagement>

 

< repository >節點下的< id >對應maven的setting.xml文件中的server的id

<!--maven連接nexus需要驗證用戶名和密碼,否則會報401錯誤-->

  <servers>

...

<server>

  <id>nexus</id>

  <username>admin</username>

  <password>admin123</password>

</server>

  </servers>

 

當pom.xml中版本號後加上了-SNAPSHOT時,項目打包上傳到地址:http://localhost:8081/repository/maven-snapshots/

<version>0.0.1-SNAPSHOT</version>

正式版本打包上傳需要去掉-SNAPSHOT

 

 

maven的setting配置文件中mirror標籤、pom.xml文件repository標籤

repository標籤

maven裏有兩種倉庫,本地倉庫和遠程倉庫。

遠程倉庫相當於公共的倉庫,大家都能看到。

本地倉庫是你本地的緩存副本,只有你看的到,主要起緩存作用。

當你向倉庫請求插件或依賴的時候,會先檢查本地倉庫裏是否有。

如果有則直接返回,否則會向遠程倉庫請求,並被緩存到本地倉庫。

如果項目中沒有配置倉庫則默認請求的遠程倉庫爲:http://repo1.maven.org/maven2

相當於pom.xlm配置:

<repository>

  <snapshots>

  <enabled>false</enabled>

  </snapshots>

  <id>central</id>

  <name>Maven Repository Switchboard</name>

  <url>http://repo1.maven.org/maven2</url>

 </repository>

 

遠程倉庫可以在工程的pom.xml文件裏指定:

<repositories>
    <repository>

該鏡像的唯一定義符
        <id>nexus</id>
        <name>maven-public</name>

構建系統會優先考慮使用該URL,而非使用默認的服務器URL
        <url>http://localhost:8081/repository/maven-public/</url>
    </repository>
</repositories>

 

mirror標籤

 

mirror相當於一個攔截器,它會攔截maven對remote repository的相關請求,把請求裏的remote repository地址,重定向到mirror裏配置的地址。

如maven默認遠程倉庫地址爲:http://repo1.maven.org/maven2,唯一定義符(id)爲:central,我們想將倉庫地址修改爲:http://localhost:8081/repository/maven-public/可以在setting文件中的<mirrors>標籤內添加如下配置:

<mirror>

      <id>nexus</id>

      <mirrorOf>central</mirrorOf>

      <name>local nexus</name>

      <url>http://localhost:8081/repository/maven-public/</url>

</mirror>

mirrorOf標籤內容central是要替代的倉庫的id。

 

高級鏡像配置

 

爲了滿足一些複雜的需求,Maven還支持更高級的鏡像配置:

1.<mirrorOf>*</mirrorOf>
匹配所有遠程倉庫。

2.<mirrorOf>external:*</mirrorOf>
匹配所有遠程倉庫,使用localhost的除外,使用file://協議的除外。也就是說,匹配所有不在本機上的遠程倉庫。

3.<mirrorOf>repo1,repo2</mirrorOf>
匹配倉庫repo1和repo2,使用逗號分隔多個遠程倉庫。

4.<mirrorOf>*,!repo1</miiroOf>
匹配所有遠程倉庫,repo1除外,使用感嘆號將倉庫從匹配中排除。

需要注意的是,由於鏡像倉庫完全屏蔽了被鏡像倉庫,當鏡像倉庫不穩定或者停止服務的時候,Maven仍將無法訪問被鏡像倉庫,因而將無法下載構件。

 

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