1. 程式人生 > 其它 >大話 Maven 系列筆記(四)——Maven倉庫

大話 Maven 系列筆記(四)——Maven倉庫

第四章、Maven倉庫

maven使用的倉庫有以下幾種

1、中央倉庫:這是預設倉庫

2、映象倉庫:通過setting.xml中的settings.mirrors.mirror配置

3、全域性profile倉庫:通過setting.xml中的settings.repositories.repository配置

4、專案倉庫:通過pom.xml中的project.repositories.repository配置

5、專案profile倉庫:通過pom.xml中的project.profiles.profile.repositories.repository配置

6、本地倉庫

搜尋順序如下(優先順序)

local_repo > settings_profile_repo > pom_profile_repo > pom_repositorys > settings.mirrors > central

翻譯成中文:

本地倉庫 > setting中的多環境 > pom中的多環境 > pom中的全域性 > setting中的映象 > 中央倉庫

1、本地倉庫

本地倉庫(本機倉庫): 位於你自己的計算機, 它是磁碟中的某個目錄。本地倉庫:預設路徑,是你登入作業系統的賬號的目錄中/.m2/repository

C:\Users\NING MEI\.m2\repository

修改本地倉庫的位置:修改maven工具的配置檔案(maven的安裝路徑\conf\setting.xml)

步驟:

1)建立一個目錄,作為倉庫使用。 目錄不要有中文和空格。 目錄不要太深。

例如: D:\openrepository

2)修改setting.xml檔案,指定 D:\openrepository這個目錄

<localRepository>D:/openrepository</localRepository>

2、遠端倉庫

(1)私服:搭建在區域網環境中,為區域網範圍內的所有Maven工程服務

(2)中央倉庫:假設在Internet上,為全世界所有Maven工程服務

(3)中央倉庫映象:為了分擔中央倉庫流量,提升使用者訪問速度

2.1、中央倉庫

中央倉庫是預設的的遠端倉庫,Maven在安裝的時候,自帶的就是中央倉庫的配置。

所有的Maven都會繼承超級POM,超級POM種包含如下配置:

<repositories> 
    <repository> 
        <id>central</id> 
        <name>Cntral Repository</name> 
        <url>http://repo.maven.apache.org</url> 
        <layout>default</layout> 
        
        <snapshots> 
            <enabled>false</enabled> 
        </snapshots> 
    </repository> 
 </repositories> 

中央倉庫包含了絕大多數流行的開源Java構件,以及原始碼、作者資訊、SCM、資訊、許可證資訊等。 還可以在裡面配置優先使用的映象,比如在國內直接連中央倉庫速度較慢,一般使用阿里雲的映象倉庫。

<mirrors> 
    <!--映象--> 
    <mirror> 
        <id>alimaven</id> 
        <!--被映象的伺服器ID--> 
        <mirrorOf>central</mirrorOf> 
        <name>aliyun maven</name> 
        <url>http://maven.aliyun.com/nexus/content/groups/public/</url> 
    </mirror>    
</mirrors> 

2.2、私服

私服是一種特殊的遠端倉庫,它是架設在區域網內的倉庫服務,私服代理廣域網上的遠端倉庫,供區域網內的Maven使用者使用。當Maven需要下載構件的時候,它從私服請求,如果私服上不存在該構件,則從外部的遠端倉庫下載,快取在私服上之後,再為Maven的下載請求提供服務。我們還可以把一些無法從外部倉庫下載到的構件上傳到私服上。

maven 在預設情況下是從中央倉庫下載構建,也就是 id 為 central 的倉庫。如果沒有特殊需求,一般只需要將私服地址配置為映象,同時配置其代理所有的倉庫就可以實現通過私服下載依賴的功能。映象配置如下:

<mirror> 
    <id>Nexus Mirror</id> 
    <name>Nexus Mirror</name> 
    <url>http://localhost:8081/nexus/content/groups/public/</url> 
    <mirrorOf>*</mirrorOf> 
</mirror>

2.3、使用docker建立Nexus私服

啟動Docker,輸入命令:

// 安裝docker
yum install docker -y
// 啟動
systemctl start docker
// 修改映象路徑 自己登陸阿里雲-》 容器映象服務 -》 映象加速器 -》 centos 就可以了
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
    "registry-mirrors": ["https://jf8zmt.mirror.aliyuncs.com"]
} E
OF
sudo systemctl daemon-reload
sudo systemctl restart docker
docker run -d -p 8081:8081 --name nexus3 sonatype/nexus3
// 檢視執行狀態
docker container ls
// 開放埠
firewall-cmd --zone=public --add-port=8081/tcp --permanent
// 獲取密碼
docker exec -it nexus3 /bin/bash
cd nexus-data/
cat admin.password

執行完畢,在瀏覽器訪問http://192.168.120.201:8081/ 進入Nexus頁面。如果訪問不成功,可以在命令列輸入 docker logs containerId 檢視日誌分析原因。

輸入預設的使用者名稱和密碼admin/xxxxxxxx即可登入。進入介面後頂部由2個按鈕,分別是倉庫和設定。可以看到由4個預設的倉庫。

一般來說,Nexus 的倉庫分為這麼幾類:

hosted 宿主倉庫:主要用於部署無法從公共倉庫獲取的構件(如 oracle 的 JDBC 驅動)以及自己或第三方的專案構件;

proxy 代理倉庫:代理公共的遠端倉庫;

group 倉庫組:Nexus 通過倉庫組的概念統一管理多個倉庫,這樣我們在專案中直接請求倉庫組即可請求到倉庫組管理的多個倉庫。

以下為了解,對私服進行許可權認證(瞭解):

大部分公共的遠端倉庫無須認證就可以直接訪問,但我們在平時的開發中往往會架設自己的Maven遠端倉庫,出於安全方面的考慮,我們需要提供認證資訊才能訪問這樣的遠端倉庫。 配置認證資訊和配置遠端倉庫不同,遠端倉庫可以直接在pom.xml中配置,但是認證資訊必須配置在settings.xml檔案中。這是因為pom往往是被提交到程式碼倉庫中供所有成員訪問的,而settings.xml一般只存在於本機。因此,在settings.xml中配置認證資訊更為安全

<!--在setting.xml中配置認證資訊-->
<server>
    <id>releases</id>
    <username>admin</username>
    <password>admin</password>
</server>
<server>
    <id>snapshots</id>
    <username>admin</username>
    <password>admin</password>
</server>

pom.xml檔案

<repositories>
    <repository>
        <!--倉庫 id,repositories 可以配置多個倉庫,保證 id 不重複-->
        <id>nexus</id>
        <!--倉庫地址,即 nexus 倉庫組的地址-->
        <url>http://192.168.120.201:8081/repository/maven-central/</url>
        <!--是否下載 releases 構件-->
        <releases>
            <enabled>true</enabled>
        </releases>
        <!--是否下載 snapshots 構件-->
        <snapshots>
            <enabled>true</enabled>
        </snapshots>
    </repository>
</repositories>

<!--配置外掛倉庫-->
<pluginRepositories>
    <!-- 外掛倉庫,maven 的執行依賴外掛,也需要從私服下載外掛 -->
    <pluginRepository>
        <!-- 外掛倉庫的 id 不允許重複,如果重複後邊配置會覆蓋前邊 -->
        <id>public</id>
        <name>Public Repositories</name>
        <url>http://192.168.120.201:8081/repository/maven-public/</url>
    </pluginRepository>
</pluginRepositories>

<!--配置釋出構件的倉庫,maven deploy操作後,構件會被髮布到哪裡-->
<distributionManagement>
    <repository>
        <id>releases</id>
        <url>http://192.168.120.201:8081/repository/maven-releases/</url>
    </repository>
    <snapshotRepository>
        <id>snapshots</id>
        <url>http://192.168.120.201:8081/repository/maven-snapshots/</url>
    </snapshotRepository>
</distributionManagement>