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會先查詢本地倉庫,如果本地倉庫已經有這個構件了,就會直接使用本地倉庫的構件,不需要從遠處倉庫下載。
我們可以從遠處倉庫中查詢需要的構件的座標資訊,目前有很多這樣的遠端倉庫:
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/
下載完成就複製到tomcat的webapps目錄下面,然後重啟tomcat就可以了,輸入網址
http://localhost:8081/nexus
點選右上角的Login in登入。
預設的使用者名稱密碼是:admin/admin123。
配置,配置郵箱,忘記密碼的時候可以通過這個郵箱找回
1、配置服務郵箱
2、配置每個使用者的郵箱
3、修改密碼
輸入密碼:這裡我為了方便都改成123456了。
5、倉庫型別
- hosted:主要使用者釋出內部構件或第三方的專案構件,比如oracle的驅動等等
hosted又分為三個庫
- releases 內部的releases模組
- snapahots 釋出內部的SNAPAHOTS模組
- 3rd party 第三方的依賴倉庫,通常就是購買的專案構件,在一般倉庫中沒有的。
- proxy 代理倉庫:代理遠端的倉庫
- virtual 虛擬倉庫,主要是maven1使用,所以現在使用的比較少了。
6、設定proxy代理倉庫的地址,並下載索引庫,這樣就可以在上面進行搜尋了。
這些倉庫的構件沒有下載下來,但是你可以下載倉庫的索引檔案,這樣你就可以使用搜索你需要的構件。一般我們需要修改如下圖幾個proxy倉庫的Configuration配置,把Download Remote Indexes改為True,然後點選儲存就可以了。他會啟動一個計劃慢慢下載搜尋的了。
在這裡你可以看到正在下載之中
這些倉庫的構件沒有下載下來,但是你可以下載倉庫的索引檔案,這樣你就可以使用搜索你需要的構件。一般我們需要修改如下圖幾個倉庫的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才能夠部署的,快照是不可以的)
也有可能是外掛包不完整,你可以先刪除上小節的從私服中下載構件的配置,先從中心倉庫中下載相關的外掛後,然後在部署。
(2)上傳jar包
手動部署構件則更為簡單了,在nexus的倉庫列表中點選要部署的目標倉庫,然後點選Artifact Upload選項卡看到下圖所示:
最後點選Upload Artifact就可以了。
下面你可以測試一下,在專案中新增依賴
<dependency>
<groupId>oracle.jdbc.driver.OracleDriver</groupId>
<artifactId>oracle</artifactId>
<version>11</version>
</dependency>
就可以使用oracle的驅動包了。