使用Nexus搭建Maven代理倉庫


什么是私服

私服,私有服務器,是公司內部Maven項目經常需要的東東,不總結一下,不足以體現出重視。Nexus是常用的私用Maven服務器,一般是公司內部使用。

常用功能

Nexus常用功能就是:指定私服的中央地址、將自己的Maven項目指定到私服地址、從私服下載中央庫的項目索引、從私服倉庫下載依賴組件、將第三方項目jar上傳到私服供其他項目組使用。

開啟Nexus服務后訪問url地址http://localhost:8081/nexus/(推薦使用自己的ip地址),之后登錄系統,用戶名密碼分別是:admin/admin123.

 

使用Maven構建和管理項目是非常享受的一件事,我們可以從Maven中央倉庫下載所需要的構件(artifact),但實際開發中由於種種原因我們需要在架設一個Maven本地代理倉庫,如:不方便訪問公網、節省帶寬和時間、管理自家的共用artifact等等。本地地理倉庫是我自己取的名字,為了不與下文的本地倉庫想混淆。

獲取構建的流程如下:用戶使用Maven構建項目時,首先是要直接從本地倉庫獲取的,如果本地倉庫沒有,它會根據setting.xml的設置去首先嘗試從遠程倉庫下載構件至本地倉庫,然后再使用本地倉庫的構件。如果setting.xml設置的遠程倉庫是本地代理倉庫,則本地代理倉庫先嘗試從自己的庫中獲取,如果沒有再從遠程倉庫(比如中央倉庫)下載構件至本地倉庫。

Nexus 是一個優秀的Maven倉庫管理器,還提供了強大的倉庫管理功能,構件搜索功能,它基於REST,友好的UI是一個extjs的REST客戶端,它占用較少的內存,基於簡單文件系統而非數據庫。這些優點使其日趨成為最流行的Maven倉庫管理器。本文就使用Nexus搭建一個本地代理倉庫。

下載和安裝

 

Nexus官方下載地址:http://www.sonatype.org/nexus/go

Nexu安裝非常容易,因為它內嵌了Jetty,只要有JRE救能直接運行。解壓Nexu包會得到兩個目錄nexus-2.7.2-03和sonatype-work,sonatype-work是默認倉庫目錄。運行、安裝都是使用nexus-2.7.2-03/bin/nexus.bat文件,它的使用方式:

Usage:nexus.bat { console : start : stop : restart : install : uninstall }

其中console是控制台方式運行,install是以windows service寄存,uninstall是下載windows service,start是運行windows service,stop是停止windows service,restart是重啟windows service。

Nexus默認端口是8081,可以在nexus-2.7.1-01/conf/nexus.properties中修改,啟動后就可以通過地址:http://localhost/:8081/nexus 來訪問了。界面如下:

管理倉庫

管理倉庫需要先登錄,默認登錄用戶名/密碼是admin/admin123。登錄后就可以看到左欄菜單的管理項。

這里,可以管理倉庫,配置Nexus系統,管理任務,管理用戶,角色,權限,查看系統的RSS源,管理及查看系統日志,等等。

    1. 設置Nexus代理上公網
      如果您的本地代理倉庫服務器沒有公網權限,Nexus為你留了使用代理的路子,點擊右邊菜單的“Server”,在右邊找到:

這里,可以管理倉庫,配置Nexus系統,管理任務,管理用戶,角色,權限,查看系統的RSS源,管理及查看系統日志,等等。

  1. 設置Nexus代理上公網
    如果您的本地代理倉庫服務器沒有公網權限,Nexus為你留了使用代理的路子,點擊右邊菜單的“Server”,在右邊找到:

    添加你的代理服務器即可。
  2. 倉庫管理
    點擊左邊導航欄的Repositories,界面的主面板會顯示所有一個所有倉庫及倉庫組的列表,你會看到它們的Type字段的值有group,hosted,proxy,virtual。這里我們不關心virtual,只介紹下另外三種類型:
    • hosted,本地代理倉庫,通常我們會部署自己的構件到這一類型的倉庫。
    • proxy,代理的遠程倉庫,它們被用來代理遠程的公共倉庫,如maven中央倉庫。
    • group,倉庫組,用來合並多個hosted/proxy倉庫,通常我們配置maven依賴倉庫組。
    如何管理、添加等操作,Nexus都寫的很清楚了,我就不一一贅述了。

修改setting.xml配置Maven的倉庫

Maven安裝后默認的是使用中央倉庫,這是為了能讓Maven開箱即用。而Maven缺省的本地倉庫地址為${user.home}/.m2/repository。也就是說,一個用戶會對應的擁有一個本地倉庫。你也可以自定義本地倉庫的位置,修改${user.home}/.m2/settings.xml。

首先需要修改Mirrors

<mirrors>

    <!-- mirror | Specifies a repository mirror site to use instead of a given

    repository. The repository that | this mirror serves has an ID that matches

    the mirrorOf element of this mirror. IDs are used | for inheritance and direct

    lookup purposes, and must be unique across the set of mirrors. | -->

  <mirror>

    <id>nexusc</id>

    <mirrorOf>*</mirrorOf>

    <name>Nexus</name>

    <url>http://localhost:8081/nexus/content/groups/public/</url>

  </mirror>

</mirrors>

在執行 Maven 命令的時候, Maven 還需要安裝一些插件包,這些插件包的下載地址也讓其指向本地代理倉庫的地址,修改如下:

<profile>

      <id>jdk-1.4</id>

        <activation>

        <jdk>1.4</jdk>

        </activation>

      <repositories>

        <repository>

          <id>nexus</id>

          <name>local private nexus</name>

          <url>http://localhost:8081/nexus/content/groups/public/</url>

          <releases>

            <enabled>true</enabled>

          </releases>

          <snapshots>

            <enabled>false</enabled>

          </snapshots>

        </repository>

      </repositories>

      <pluginRepositories>

        <pluginRepository>

          <id>nexus</id>

          <name>local private nexus</name>

          <url>http://localhost:8081/nexus/content/groups/public/</url>

          <releases>

            <enabled>true</enabled>

          </releases>

          <snapshots>

            <enabled>false</enabled>

          </snapshots>

        </pluginRepository>

      /pluginRepositories>

</profile>

關於更多setting.xml字段解釋請看這里。

現在你就可以使用本地倉庫構建Maven項目了,踏上愉快的構建之旅!!

部署構件至Nexus

1.通過Nexus UI部署

有時候有個jar文件你無法從公共Maven倉庫找到,但是你能從其它得到這個jar文件(甚至是POM),那么你完全可以將這個文件部署到Nexus中,使其成為標准流程的一部分。步驟如下:

點擊左邊導航欄的"Repository",在右邊的倉庫列表中選擇一個倉庫,如“3rd Party”,然后在頁面下方的tab選擇“Artifact Upload Artifact(s)”,你會看到構件上傳界面。選擇你要上傳的構件,並指定POM,(或者手工編寫GAV等信息),最后點擊Upload,該構件就直接被部署到了Nexus的"3rd Party"倉庫中。

 

2.通過Maven部署
更常見的用例是:團隊在開發一個項目的各個模塊,為了讓自己開發的模塊能夠快速讓其他人使用,你會想要將snapshot版本的構件部署到Maven倉庫中,其他人只需要在POM添加一個對於你開發模塊的依賴,就能隨時拿到最新的snapshot。
以下的pom.xml配置和settings.xml能讓你通過Maven自動化部署構件:


pom.xml

<project>

  ...

  <distributionManagement>

  <repository>

    <id>nexus-releases</id>

    <name>Nexus Release Repository</name>

    <url>http://localhost:8081/nexus/content/repositories/releases/</url>

  </repository>

  <snapshotRepository>

    <id>nexus-snapshots</id>

    <name>Nexus Snapshot Repository</name>

    <url>http://localhost:8081/nexus/content/repositories/snapshots/</url>

  </snapshotRepository>

  </distributionManagement>

...

</project>

settings.xml

<settings>

...

    <servers>

      <server>

        <id>nexus-releases</id>

        <username>admin</username>

        <password>admin123</password>

      </server>

      <server>

         <id>nexus-snapshots</id>

        <username>admin</username>

        <password>admin123</password>

      </server>

  </servers>

...

</settings>

這里我們配置所有的snapshot版本構件部署到Nexus的Snapshots倉庫中, 所有的release構件部署到Nexus的Releases倉庫中。由於部署需要登陸,因為我們在settings.xml中配置對應Repository id的用戶名和密碼。
然后,在項目目錄中執行mvn deploy ,你會看到maven將項目構件部署到Nexus中,瀏覽Nexus對應的倉庫,就可以看到剛才部署的構件。當其他人構建其項目時,Maven就會從Nexus尋找依賴並下載。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM