1. 程式人生 > >4、maven倉庫的概念和建立私服

4、maven倉庫的概念和建立私服

學習目標:

1、瞭解maven的本地庫、私有庫和遠端庫的概念

2、瞭解nexus

3、掌握nexus的安裝和配置

學習過程:

一、倉庫的概念

1、倉庫簡介

maven倉庫分為本地倉庫和遠端倉庫。前面講過,maven專案所需要的構件並不是複製在專案的lib中,而是每一次部署專案的時候從maven本地倉庫中引用過來的,那麼maven本地倉庫在什麼地方呢?預設是在使用者目錄的.m2 epository,比如我的window系統就是在C:UsersAdministrator.m2 epository目錄下的。

大家知道java有很多第三方的構件,所以maven的本地倉庫也不是儲存了所有的構件,你需要使用的構件在本地倉庫中沒有,maven會自動從遠端中心倉庫中下載,這種自動化的功能,是我們在使用maven時不需要自己去下載構件,以後再使用這個構件是也會maven會先查詢本地倉庫,如果本地倉庫已經有這個構件了,就會直接使用本地倉庫的構件,不需要從遠處倉庫下載。

我們可以從遠處倉庫中查詢需要的構件的座標資訊,目前有很多這樣的遠端倉庫:

http://mvnrepository.com/

https://repository.sonatype.org

2、安裝構件在本地倉庫中

我們之前使用的構件都是從中心倉庫下載到本地倉庫,然後再引用的。如果有需要我們也可以把自己開發的構件安裝在本地倉庫中。比如我們操作資料庫時候經常需要封裝分頁類Page,這個類我們可以設計成為一個構件,儲存在倉庫中。

(1)使用Eclipse建立一個maven專案

選擇maven-archetype-quickstart就可以了,輸入相關的資訊

專案的pom.xml檔案

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

  <modelVersion>4.0.0</modelVersion>
  <groupId>com.liubao.dao</groupId>
  <artifactId>basedao</artifactId>
  <version>1.0</version>
  <packaging>jar</packaging>
  <name>basedao</name>
  <url>http://maven.apache.org</url>

</project>

刪除預設的App.java類,新建一個BaseDao類,並實現內容,程式碼如下:

  public class BaseDao {
    public void connect(){
        System.out.println("只是測試能否按照,所以程式碼就簡單一點了。");
    }
}

(2)安裝到本地倉庫中

使用maven的 install 命令就可以安裝到本地庫中

右鍵選中專案,Run as >> Maven Install

這時候你可以到你的本地倉庫中檢視是否已經安裝成功。

(3)使用這個構件

使用自己開發的構件和使用其他的構件一樣,說明好構件的座標就可以了。新建另外一個專案test,依賴我們剛才的構件,修改pom.xml檔案,新增對baseDao的依賴,程式碼如下;

<dependency>
    <groupId>com.liubao.dao</groupId>
    <artifactId>basedao</artifactId>
    <version>1.0</version>
</dependency>

這時候你可以在程式碼中使用BaseDao類了,程式碼如下:

 public class App {
    public static void main( String[] args ){
         BaseDao baseDao=new BaseDao();
         baseDao.connect();
    }
}

二、搭建私服

1、為什麼要使用私服

本地倉庫一般只適合你一個人使用,但是我們在公司裡面很多時候都是團隊開發的,有很多構件需要共享,如果我們有一個自己開發的構件,需要團隊共享這個構件,這時候我們最好就就搭建一個自己的“遠端倉庫”,一般我們稱為私服,私服可以配置從中心倉庫中下載索引和構件,團隊內部也可以把自己開發的構件安裝在私服中。這樣我們既可以減少對外部網路的訪問流量,也可以很好的維護團隊自己開發構件。

當然maven私服不需要我們自己開發,目前有幾個比較流行的maven私服,有apache的Archiva,Sonatype Nexus等等軟體,我們只需要下載部署私服就可以了。下面就介紹比較流行的Sonatype Nexus,你可以到網上下載他的war版,這樣你只需要把檔案複製到tomcat的webapps目錄下就可以運行了。Sonatype Nexus的下載地址是:

http://www.sonatype.org/nexus/

attcontent/ed40cb5b-b336-4674-836b-d848ca8b7704.png

下載完成就複製到tomcat的webapps目錄下面,然後重啟tomcat就可以了,輸入網址

http://localhost:8081/nexus

點選右上角的Login in登入。

attcontent/482fa0bc-f856-4199-8883-b279baa8a114.png

預設的使用者名稱密碼是:admin/admin123。

attcontent/45c67230-eab4-4b47-9829-aa90857a479c.png

 

配置,配置郵箱,忘記密碼的時候可以通過這個郵箱找回

1、配置服務郵箱

attcontent/e812eb92-ffd7-46a6-94b8-5a2612035788.png

2、配置每個使用者的郵箱

attcontent/c4a272b7-0366-4b03-829b-9b2f8597db89.png

3、修改密碼

attcontent/a000c652-d522-4355-99c2-2bfc306dbe28.png

輸入密碼:這裡我為了方便都改成123456了。

5、倉庫型別

attcontent/0c55a090-accf-4943-8dbc-bebfe76bffa8.png

  • hosted:主要使用者釋出內部構件或第三方的專案構件,比如oracle的驅動等等

     hosted又分為三個庫

  1.      releases 內部的releases模組
  2.      snapahots 釋出內部的SNAPAHOTS模組
  3.      3rd party 第三方的依賴倉庫,通常就是購買的專案構件,在一般倉庫中沒有的。
  • proxy 代理倉庫:代理遠端的倉庫
  • virtual 虛擬倉庫,主要是maven1使用,所以現在使用的比較少了。

6、設定proxy代理倉庫的地址,並下載索引庫,這樣就可以在上面進行搜尋了。

這些倉庫的構件沒有下載下來,但是你可以下載倉庫的索引檔案,這樣你就可以使用搜索你需要的構件。一般我們需要修改如下圖幾個proxy倉庫的Configuration配置,把Download Remote Indexes改為True,然後點選儲存就可以了。他會啟動一個計劃慢慢下載搜尋的了。

attcontent/fb017d03-2564-4d83-a414-c37b5e2224f8.png

在這裡你可以看到正在下載之中

attcontent/35a9b303-4fc9-41fd-b69b-c1a294dab96b.png

這些倉庫的構件沒有下載下來,但是你可以下載倉庫的索引檔案,這樣你就可以使用搜索你需要的構件。一般我們需要修改如下圖幾個倉庫的Configuration配置,把Download Remote Indexes改為True,然後點選儲存就可以了。

下載索引需要時間,當然下載索引並不是必須的,對你自己的構件你可以建立索引以方便查詢,如果是第三方的構件你也可以去Nexus的官方網站搜尋構件。

7、客戶端配置

修改客戶端的setting.xml settings.xml中不能直接插入<repositories>元素,需要在profile配置,最後使用<activeProfile>元素自動將這個profile啟用。這裡的central倉庫指向了剛才我們配置的Nexus中“Repositories”倉庫組,也就是說,所有該倉庫組包含的倉庫都能供我們使用。此外,我們通過<releases>和<snapshots>元素激活了Maven對於倉庫所有型別構件下載的支援,當然你也可以調節該配置,比如說禁止Maven從Nexus下載snapshot構件。

settings.xml中不能直接插入<repositories>元素,需要在profile配置,最後使用<activeProfile>元素自動將這個profile啟用。這裡的central倉庫指向了剛才我們配置的Nexus中“Repositories”倉庫組,也就是說,所有該倉庫組包含的倉庫都能供我們使用。此外,我們通過<releases>和<snapshots>元素激活了Maven對於倉庫所有型別構件下載的支援,當然你也可以調節該配置,比如說禁止Maven從Nexus下載snapshot構件。

<!--配置許可權,使用預設使用者,在上傳構件的時候會使用到這個服務。-->   

 <servers>
        <server>
             <id>nexus-releases</id>
            <username>deployment</username>
            <password>123456</password>
        </server>
        <server>
            <id>nexus-snapshots</id>
            <username>deployment</username>
            <password>123456</password>
        </server>
  </servers>

<profiles>
      <profile>
           <id>centralnexus</id>
                <activation>
                    <activeByDefault>false</activeByDefault>
                    <jdk>1.6</jdk>
                </activation>
                <repositories>
                    <!-- 私有庫地址-->
                    <repository>
                        <id>nexus</id>
                        <url>http://192.168.3.21: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://192.168.3.21:8081/nexus/content/groups/public/</url>
                        <releases>
                            <enabled>true</enabled>
                        </releases>

                        <snapshots>
                            <enabled>true</enabled>
                       </snapshots>
                    </pluginRepository>
                </pluginRepositories>
            </profile>

  </profiles>

  <activeProfiles>
    <activeProfile>centralnexus</activeProfile>
  </activeProfiles>

4、上傳構件到私服中

(1)上傳自己開發的構件

修改pom.xml

  <distributionManagement>    
       <repository>    
           <id>mynexus-releases</id>    
           <url>http://localhost:8081/nexus/content/repositories/releases/</url>    
       </repository>    

       <snapshotRepository>    
           <id>mynexus-snapshot</id>    
           <url>http://localhost:8081/nexus/content/repositories/snapshots/</url>    
       </snapshotRepository>    
  </distributionManagement>

還需要在setting.xml中配置使用者名稱和密碼,注意id要和上面的pom.xml的id對應。

<servers>    

     <server>    
      <id>mynexus-releases</id>    
      <username>admin</username>    
      <password>admin123</password>    
    </server>    

    <server>    
      <id>mynexus-snapshot</id>    
      <username>admin</username>    
      <password>admin123</password>    
    </server>    

</servers>

 

 上面的配置中我用的是超級管理員的賬戶,開發專案中可以改為具有部署構件許可權的使用者就可以了。

下面你就可以測試一下了,這裡在專案目錄中執行mvn deploy,注意不是mvn install。如果有問題,你可能需要做出以下的調整

修改release倉庫的Configuration的Deployemnt Policy 為 Allow Redeploy。(這個其實是不需要的,預設只有release才能夠部署的,快照是不可以的)

attcontent/9740eff4-c340-4aed-84cc-afcebcfe0e29.png

也有可能是外掛包不完整,你可以先刪除上小節的從私服中下載構件的配置,先從中心倉庫中下載相關的外掛後,然後在部署。

(2)上傳jar包

手動部署構件則更為簡單了,在nexus的倉庫列表中點選要部署的目標倉庫,然後點選Artifact Upload選項卡看到下圖所示:

attcontent/900c7112-1ac1-4ebd-88be-b913291e500f.png

 

attcontent/de67989e-842f-4ba5-8b90-6d5e2c99ecf8.png

最後點選Upload Artifact就可以了。

下面你可以測試一下,在專案中新增依賴

 <dependency>
    <groupId>oracle.jdbc.driver.OracleDriver</groupId>
    <artifactId>oracle</artifactId>
    <version>11</version>
</dependency>

就可以使用oracle的驅動包了。