maven配置文件,節點理解

前言

當我們進入一個公司,基本會統一發maven的setting文件,因爲很多公司都有自己的私有倉庫,很少有人去了解過setting文件,爲什麼有的setting文件要配repository、server還要配mirror?這些配置又有什麼含義,他們之間的關係是什麼?配置多個repository查找jar的順序是什麼?結合mirror又會如何查找?

節點理解

proxy是maven服務器不能訪問外網時需要設置的代理服務(不常用)
server是maven需要打包代碼上傳到私服時,設置私服的鑑權信息,賬號+密碼
repository是maven去下載jar包的地址
mirror用於代替repository的鏡像地址

internal repository(私服)指在局域網內部搭建的repository,跟local repository、jboss repository等的區別僅僅在於其URL是一個內部地址

mirro(鏡像),相當於一個代理,會攔截去指定的遠程repository下載構件的請求,然後從自己這裏找出構件返回給客戶端。配置mirror一般是出於網速。

私服和mirror是不同的,repository,用來提供公司內部的maven構件,而mirror只是遠程repository的網絡加速器

很多internal repository搭建工具也會提供mirror服務,比如Nexus可以讓同一個URL用作internal repository,又讓它成爲所有repository的mirror

mirror配置

一個mirror節點可以對應一個或對個repository節點,由mirrorOf中的值決定

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
                      https://maven.apache.org/xsd/settings-1.0.0.xsd">
  ...
  <mirrors>
    <mirror>
      <id>planetmirror.com</id>
      <name>PlanetMirror Australia</name>
      <url>http://downloads.planetmirror.com/pub/maven2</url>
      <mirrorOf>central</mirrorOf>
    </mirror>
  </mirrors>
  ...
</settings>

  • id: mirror標識
  • name: 屬性、名稱
  • url: 屬性,鏡像地址
  • mirrorOf: 該鏡像對應repository的ID

以下是使用網易的鏡像,來替代中央的倉庫的配置樣例:

<mirrors>
     <mirror>
      <id>maven.163.com</id>
      <name>maven mirror in China</name>
      <url>http://mirrors.163.com/maven/repository/maven-public/</url>
      <mirrorOf>central</mirrorOf>
    </mirror>
</mirrors>

在使用的過程中,會出現這種不標準的配置:

<mirrors>
     <mirror>
      <id>maven.163.com</id>
      <name>maven mirror in China1</name>
      <url>http://mirrors.163.com/maven/repository/maven-public/</url>
      <mirrorOf>central</mirrorOf>
    </mirror>
</mirrors>
<mirrors>
    <mirror>
      <id>aliyun.com</id>
      <name>maven mirror in China2</name>
      <mirrorOf>central</mirrorOf>
      <url>https://maven.aliyun.com/repository/public</url>
    </mirror>
</mirrors>

這時候將兩個鏡像同時指向(central)中央倉庫,這種maven只會選取第一個鏡像,第二個永遠不會生效。

repository配置

repository節點必須作爲repositorys的子節點存在,而repositorys節點又必須作爲profiles節點的子節點存在

<profiles>
    <profile>
        <id>nexus</id>
        <repositories>
            <!-- 公司私服配置 -->
            <repository>
                <id>you-internal-repos</id>
                <url>you-internal-repos-address</url>
                <releases>
                    <enabled>true</enabled>
                    <updatePolicy>always</updatePolicy>
                    <checksumPolicy>warn</checksumPolicy>
                </releases>
                <snapshots>
                    <enabled>true</enabled>
                    <updatePolicy>always</updatePolicy>
                    <checksumPolicy>warn</checksumPolicy>
                </snapshots>
            </repository>
            <!-- 阿里雲私服配置 -->
            <repository>
                <id>aliyun-repos</id>
                <url>https://maven.aliyun.com/nexus/content/groups/public/</url>
                <releases>
                    <enabled>true</enabled>
                </releases>
                <snapshots>
                    <enabled>true</enabled>
                </snapshots>
            </repository>
        </repositories>
    </profile>
</profiles>

<!-- 默認生效 -->
<activeProfiles>
    <activeProfile>nexus</activeProfile>
</activeProfiles>

mirror、repository查找順序

當一個repository存在mirror時,maven查找jar時永遠都是使用mirror配置的地址
當repository不存在mirror時,按照repositorys節點定義的先後順序。先定義,在查找。

配置實例

<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
  <localRepository>你的本地倉庫地址</localRepository>
  <pluginGroups></pluginGroups>
  <proxies></proxies>
  <servers></servers>
  <mirrors>
    <mirror>
      <id>nexus-aliyun</id>
      <name>Nexus aliyun</name>
      <mirrorOf>central</mirrorOf>
      <url>https://maven.aliyun.com/repository/public</url>
    </mirror>
    <mirror>
      <id>nexus-mine</id>
      <name>Nexus mine</name>
      <mirrorOf>*</mirrorOf>
      <url>http://xx.xx.xx.xx/nexus/content/groups/public</url>
    </mirror>
  </mirrors>
</settings>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章