1. 程式人生 > >Maven之setting.xml解析

Maven之setting.xml解析

1、宣告規範

<?xml version="1.0" encoding="UTF-8"?>
<settings 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/settings-1.0.0.xsd">

2、元素概覽

<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/>
    <interactiveMode/>
    <usePluginRegistry/>
    <offline/>
    <pluginGroups/>
    <servers/>
    <mirrors/>
    <proxies/>
    <profiles/>
    <activeProfiles/>
</settings>

3、元素解釋

<localRepository>D:\apache-maven-3.3.9\repository</localRepository> #本地倉庫路徑
<interactiveMode>true</interactiveMode> #是否需要和使用者互動以獲得輸入。如果Maven需要和使用者互動以獲得輸入,則設定成true,反之則應為false。預設為true。
<usePluginRegistry>false</usePluginRegistry> #Maven是否需要使用plugin-registry.xml檔案來管理外掛版本。如果需要讓Maven使用檔案${user.home}/.m2/plugin-registry.xml來管理外掛版本,則設為true。預設為false。
<offline>false</offline> #Maven是否需要在離線模式下執行。如果構建系統需要在離線模式下執行,則為true,預設為false。當由於網路設定原因或者安全因素,構建伺服器不能連線遠端倉庫的時候,該配置就十分有用。
<pluginGroups/> #外掛組
<proxies/> #通過安全認證的代理訪問因特網
<servers></servers> # 1.定義jar包下載的Maven倉庫 2. 定義部署伺服器
<mirrors></mirrors> #倉庫列表配置的下載映象列表
<profiles></profiles> #用於定義屬性鍵值對的。當該profile是啟用狀態的時候,properties下面指定的屬性都可以在pom.xml中使用
<repositories></repositories> #用於定義遠端倉庫的,當該profile是啟用狀態的時候,這裡面定義的遠端倉庫將作為當前pom的遠端倉庫
<activeProfiles></activeProfiles> #啟用配置

3、重要元素詳解

proxies:有時候你所在的公司基於安全因素考慮,要求你使用通過安全認證的代理訪問因特網。這時就需要為Maven配置HTTP代理。

<!--用來配置不同的代理,多代理profiles 可以應對筆記本或移動裝置的工作環境:通過簡單的設定profile id就可以很容易的更換整個代理配置。 -->
 <proxies>
  <!--代理元素包含配置代理時需要的資訊-->
  <proxy>
   <!--代理的唯一定義符,用來區分不同的代理元素。-->
   <id>myproxy</id>
   <!--該代理是否是啟用的那個。true則啟用代理。當我們聲明瞭一組代理,而某個時候只需要啟用一個代理的時候,該元素就可以派上用處。 -->
   <active>true</active>
   <!--代理的協議。 協議://主機名:埠,分隔成離散的元素以方便配置。-->
   <protocol>http</protocol>
   <!--代理的主機名。協議://主機名:埠,分隔成離散的元素以方便配置。  -->
   <host>proxy.somewhere.com</host>
   <!--代理的埠。協議://主機名:埠,分隔成離散的元素以方便配置。 -->
   <port>8080</port>
   <!--代理的使用者名稱,使用者名稱和密碼錶示代理伺服器認證的登入名和密碼。 -->
   <username>proxyuser</username>
   <!--代理的密碼,使用者名稱和密碼錶示代理伺服器認證的登入名和密碼。 -->
   <password>somepassword</password>
   <!--不該被代理的主機名列表。該列表的分隔符由代理伺服器指定;例子中使用了豎線分隔符,使用逗號分隔也很常見。-->
   <nonProxyHosts>*.google.com|ibiblio.org</nonProxyHosts>
  </proxy>
 </proxies>

####servers:

<!--配置服務端的一些設定。一些設定如安全證書不應該和pom.xml一起分發。這種型別的資訊應該存在於構建伺服器上的settings.xml檔案中。-->
 <servers>
  <!--伺服器元素包含配置伺服器時需要的資訊 -->
  <server>
   <!--這是server的id(注意不是使用者登陸的id),該id與distributionManagement中repository元素的id相匹配。-->
   <id>server001</id>
   <!--鑑權使用者名稱。鑑權使用者名稱和鑑權密碼錶示伺服器認證所需要的登入名和密碼。 -->
   <username>my_login</username>
   <!--鑑權密碼 。鑑權使用者名稱和鑑權密碼錶示伺服器認證所需要的登入名和密碼。密碼加密功能已被新增到2.1.0 +。詳情請訪問密碼加密頁面-->
   <password>my_password</password>
   <!--鑑權時使用的私鑰位置。和前兩個元素類似,私鑰位置和私鑰密碼指定了一個私鑰的路徑(預設是${user.home}/.ssh/id_dsa)以及如果需要的話,一個密語。將來passphrase和password元素可能會被提取到外部,但目前它們必須在settings.xml檔案以純文字的形式宣告。 -->
   <privateKey>${usr.home}/.ssh/id_dsa</privateKey>
   <!--鑑權時使用的私鑰密碼。-->
   <passphrase>some_passphrase</passphrase>
   <!--檔案被建立時的許可權。如果在部署的時候會建立一個倉庫檔案或者目錄,這時候就可以使用許可權(permission)。這兩個元素合法的值是一個三位數字,其對應了unix檔案系統的許可權,如664,或者775。 -->
   <filePermissions>664</filePermissions>
   <!--目錄被建立時的許可權。 -->
   <directoryPermissions>775</directoryPermissions>
  </server>
 </servers>

一般使用:

 <servers>

    <server>
      <id>nexus-snapshots</id>    
      <username>username</username>
      <password>password</password>
    </server>

  </servers>

mirrors:

 <mirrors>

     <mirror>
        <!--該映象的唯一識別符號。id用來區分不同的mirror元素。  -->
        <id>my-nexus</id>
        <!--此處配置所有的構建均從私有倉庫中下載 *代表所有,也可以寫central -->
        <mirrorOf>*</mirrorOf>
        <name>central repository</name>
        <!--該映象的URL。構建系統會優先考慮使用該URL,而非使用預設的伺服器URL。  -->
        <url>http://ip:8081/repository/maven-public/</url>
    </mirror>
		<mirror>
			<id>alimaven</id>
			<name>aliyun maven</name>
			<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
			<mirrorOf>central</mirrorOf>
		</mirror>
  </mirrors>

profiles、repositories、pluginRepositories:

 <profiles>
  
        <profile>
            <id>nexus</id>
            <!--遠端倉庫列表,它是Maven用來填充構建系統本地倉庫所使用的一組遠端專案。  -->
            <repositories>
                <!--釋出版本倉庫-->
                <repository>
                    <id>nexus</id>
                    <!--name隨便-->
                    <name>Nexus Release Snapshot Repository</name>
                    <!--地址是nexus中repository(Releases/Snapshots)中對應的地址-->
                    <url>http://ip:8081/repository/maven-releases/</url>
                    <!--true或者false表示該倉庫是否為下載某種型別構件(釋出版,快照版)開啟。 -->
                    <releases>
                        <enabled>true</enabled>
                    </releases>
                    <snapshots>
                        <enabled>true</enabled>
                    </snapshots>
                </repository>
            </repositories>
            <!--發現外掛的遠端倉庫列表。倉庫是兩種主要構件的家。第一種構件被用作其它構件的依賴。這是中央倉庫中儲存的大部分構件型別。另外一種構件型別是外掛。-->
            <!--各節點的含義和repository是一樣的-->
            <pluginRepositories>
                <pluginRepository>
                    <id>nexus</id>
                    <name>Nexus Release Snapshot Repository</name>
                    <url>http://ip:8081/repository/maven-snapshots/</url>
                    <releases>
                        <enabled>true</enabled>
                    </releases>
                    <snapshots>
                        <enabled>true</enabled>
                    </snapshots>
                </pluginRepository>
            </pluginRepositories>
        </profile>
    <!--設定maven編譯器級別-->
        <profile>
            <id>jdk18</id>
            <activation>
                <!--profile預設是否啟用的標識 -->
                <activeByDefault>true</activeByDefault>
                <!--activation有一個內建的java版本檢測,如果檢測到jdk版本與期待的一樣,profile被啟用。 -->
                <jdk>1.8</jdk>
            </activation>
            <properties>
                <maven.compiler.source>1.8</maven.compiler.source>
                <maven.compiler.target>1.8</maven.compiler.target>
                <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
            </properties>
        </profile>
  </profiles>

activeProfiles:

  <!--啟用配置-->
    <activeProfiles>
        <!--profile下的id-->
        <activeProfile>nexus</activeProfile>
    </activeProfiles>