1. 程式人生 > >05-maven私服安裝與使用

05-maven私服安裝與使用

Maven 倉庫分為本地倉庫和遠端倉庫,尋找構件時,首先從本地倉庫找,找不到則到遠端倉庫找,再找不到就報錯;在遠端倉庫中找到了,就下載到本地倉庫再使用。中央倉庫是 Maven 核心自帶的遠端倉庫,預設地址:http://repo1.maven.org/maven2。除了中央倉庫,還有其它很多公共的遠端倉庫。私服是架設在本機或區域網中的一種特殊的遠端倉庫,通過私服可以方便的管理其它所有的外部遠端倉庫。

配置映象倉庫

maven預設使用中央倉庫下載元件,速度怎麼樣,我想我不用多說。現在我們來配置一個國內的映象倉庫來提升下載速度。如果您想用其他的映象倉庫,可以自己網上搜索。

本地倉庫

Maven 本地倉庫預設地址為:${user.home}/.m2/repository。

通過修改 %M2_HOME%/conf/settings.xml (或者:${user.home}/.m2/settings.xml,針對當前使用者(推薦))配置檔案可以更改本地倉庫的位置。

<localRepository>/path/to/local/repo</localRepository>
修改路徑如:D:/repo

映象倉庫

映象倉庫可以理解為倉庫的副本,從倉庫中可以找到的構件,從映象倉庫中也可以找到。比如針對中央倉庫 http://repo1.maven.org/maven2 ,在中國有它的映象倉庫,這樣我們直接訪問映象倉庫,更快更穩定。修改settings.xm配置
<settings>
    ...
    <mirrors>
 
    <!-- 配置阿里雲映象 -->
    <mirror>
      <id>alimaven</id>
      <name>aliyun maven</name>
      <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
      <mirrorOf>central</mirrorOf>        
    </mirror>
 
    </mirrors>
    ...
</settings>
其中,<mirrorOf> 指明瞭為哪個倉庫配置映象,可以使用萬用字元如:<mirrorOf>*</mirrorOf>,或者 <mirrorOf>repo1,repo2</mirrorOf> 等進行匹配。一旦配置了映象,所有針對原倉庫的訪問將轉到映象倉庫的訪問,原倉庫將不再能直接訪問,即使映象倉庫不穩定或停用。在搭建私服的時候,我們通常為所有倉庫設定映象為私服地址,通過私服對所有倉庫進行統一管理。<mirrorOf>*,!repo1</miiroOf>匹配所有遠端倉庫,repo1除外,使用感嘆號將倉庫從匹配中排除。需要注意的是,由於映象倉庫完全遮蔽了被映象倉庫,當映象倉庫不穩定或者停止服務的時候,Maven仍將無法訪問被映象倉庫,因而將無法下載構件。

配置私服映象地址

Nexus安裝

下載後的檔案為:nexus-2.12.0-01-bundle.zip(Windows)或nexus-2.12.0-01-bundle.tar.gz(linux)

2.安裝Nexus

解壓nexus-2.12.0-01-bundle.zip到指定路徑即可(路徑上最好還是不要有中文)。包中資料夾如下圖:

解壓後進入/nexus-2.12.0-01/bin目錄,執行如下命令:為方便啟動和退出Nexus,可將bin目錄新增到環境變數,或者設定nexus服務為自啟動服務

先執行 nexus install 將Nexus安裝為Windows服務。可將服務啟動方式設為手動,以後通過 nexus start 即可啟動Nexus ,通過 nexus stop 退出Nexus:(這裡win7至win10有許可權的問題如下圖:出現此問題以管理員身份執行cmd.exe即可)

若要改變nexus的埠等配置,請修改${nexus_HOME}/conf/nexus.properties檔案 點選右上角 Log In,使用使用者名稱:admin ,密碼:admin123 登入,可使用更多功能:

Nexus 的倉庫分如下幾類:

  • hosted 宿主倉庫:主要用於部署無法從公共倉庫獲取的構件(如 oracle 的 JDBC 驅動)以及自己或第三方的專案構件;
    • 3rd party:第三方的專案構件(如 oracle 的 JDBC 驅動),不能從公共倉庫下載到,就需要將其部署到自己的倉庫中。
    • Releases:部署我們自己的release構件
    • Snapshots:部署我們自己的snapshot構件
  • proxy 代理倉庫:代理公共的遠端倉庫;
  • virtual 虛擬倉庫:用於適配 Maven 1;
  • group 倉庫組:Nexus 通過倉庫組的概念統一管理多個倉庫,這樣我們在專案中直接請求倉庫組即可請求到倉庫組管理的多個倉庫。

配置Maven使用Nexus

預設情況下,Maven依賴於中央倉庫,這是為了能讓Maven開箱即用,但僅僅這麼做明顯是錯誤的,這會造成大量的時間及頻寬的浪費。既然文章的前面已經介紹瞭如何安裝和配置Nexus,現在我們就要配置Maven來使用本地的Nexus,以節省時間和頻寬資源。配置使用私服的方法有多種,下面先介紹其中一種:

我們可以將Repository配置到POM中,但一般來說這不是很好的做法,原因很簡單,你需要為所有的Maven專案重複該配置。因此,這裡我將Repository的配置放到$user_home/.m2/settings.xml中:

    <settings>  
    ...  
    <profiles>  
      <profile>  
    <id>dev-nexus-server</id>  
    <!-- 配置倉庫 -->
    <repositories>  
        <repository>  
            <id>local-nexus</id>  
            <url>http://127.0.0.1:8081/nexus/content/groups/public/</url>  
            <releases>  
                <enabled>true</enabled>  
            </releases>  
            <snapshots>  
                <enabled>true</enabled>  
            </snapshots>  
        </repository>  
    </repositories>  
    <!-- 外掛倉庫 -->
    <pluginRepositories>
        <pluginRepository>
            <id>nexus</id>
            <url>http://127.0.0.1:8081/nexus/content/groups/public</url>
            <releases>
                <enabled>true</enabled>
            </releases>
            <snapshots>
                <enabled>false</enabled><!-- 外掛不使用快照版本 -->
           </snapshots>
        </pluginRepository>
    </pluginRepositories>
</profile>  
    </profiles>  
    <activeProfiles>  
      <activeProfile>dev-nexus-server</activeProfile>  
    </activeProfiles>  
    ...  
    </settings>

部署構件至Nexus

Nexus提供了兩種方式來部署構件,你可以從UI直接上傳,也可以配置Maven部署構件。

通過Nexus UI部署:如新增ojdbc.jar這樣的第三方包

按下圖所示進入上傳頁面


填寫相關資訊

新增到artifacts並上傳

新增後即可在索引中查看了

新增到其他倉庫一樣的操作 發現錯了可以刪除相應構件

通過Maven部署

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

pom.xml修改

<project>
...
<distributionManagement>
<!-- release版本倉庫 -->
  <repository>
  <!-- id應該唯一 -->
    <id>nexus-releases</id>
      <name>Nexus Release Repository</name>
      <url>http://127.0.0.1:8081/nexus/content/repositories/releases/</url>
  </repository>
  <!-- 快照版本倉庫 -->
  <snapshotRepository>
    <id>nexus-snapshots</id>
    <name>Nexus Snapshot Repository</name>
    <url>http://127.0.0.1:8081/nexus/content/repositories/snapshots/</url>
  </snapshotRepository>
</distributionManagement>
...
</project>

settings.xml

<settings>  
...  
<servers>  
  <server>  
  <!-- 對應pox.xml中的定義 -->
    <id>nexus-releases</id>  
    <!-- nexus對應的賬號 -->
    <username>admin</username>  
    <!-- nexus對應的密碼 -->
    <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尋找依賴並下載。