Maven之settings.xml配置文件


簡介

settings.xml 是 maven 的配置文件

配置文件的優先級從高到低為:
pom.xml${user.home}/.m2/settings.xml${maven.home}/conf/settings.xml


<settings> 配置文件標簽對
<localRepository> 本地倉庫配置(默認的目錄是:${user.home}/.m2/repository)
<interactiveMode> 指令模式(互動模式)Maven在執行中需要輸入一些操作指令或者一些參數時,會讓用戶輸入。
<offline> 離線模式 確定maven在執行構建時是否應嘗試連接到網絡,這會對構件的下載、部署和其他操作產生影響。
<proxies> 配置代理服務器
<servers> 配置服務端的一些設置。如安全證書之類的信息應該配置在 settings.xml 文件中
<distributionManagement> 指定Maven分發構件的位置 可以用來 配置Nexus私服
<mirrors> 配置了鏡像之后,Maven會從“備用倉庫”里面獲取依賴,而不是目標倉庫。
<profile> 配置Profile ,定義一系列的配置信息,profile一定要給定一個全局唯一的ID,不能沖突
pluginGroups 默認包含maven插件、mojo插件,用於插件在使用時沒有指定groupId時,這個列表就會被搜索。

demo案例

<?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">
    <!-- 構建系統本地倉庫的路徑。其默認值:~/.m2/repository -->
    <!-- <localRepository>${user.home}/.m2/repository</localRepository> -->

    <!-- 是否需要和用戶交互以獲得輸入。默認為 true -->
    <!-- <interactiveMode>true</interactiveMode> -->

    <!-- 是否需要使用 ~/.m2/plugin-registry.xml 文件來管理插件版本。默認為 false -->
    <!-- <usePluginRegistry>false</usePluginRegistry> -->

    <!-- 是否需要在離線模式下運行,默認為 false。當由於網絡設置原因或者安全因素,構建服務器不能連接遠程倉庫的時候,該配置就十分有用 -->
    <!-- <offline>false</offline> -->

    <!-- 當插件的 groupId 沒有顯式提供時,供搜尋插件 groupId 的列表。使用某個插件,如果沒有指定 groupId 的時候,maven 就會使用該列表。
        默認情況下該列表包含了 org.apache.maven.plugins 和 org.codehaus.mojo -->
    <!-- <pluginGroups> -->
        <!-- plugin 的 groupId -->
        <!-- <pluginGroup>org.codehaus.mojo</pluginGroup> -->
    <!-- </pluginGroups> -->

    <!-- 配置服務端的一些設置。如安全證書之類的信息應該配置在 settings.xml 文件中,避免配置在 pom.xml 中 -->
    <!-- <servers> -->
        <!-- <server> -->
            <!-- 這是 server 的 id(注意不是用戶登陸的 id),該 id 與 distributionManagement 中 repository 元素的 id 相匹配 -->
            <!-- <id>server001</id> -->
            <!-- 鑒權用戶名 -->
            <!-- <username>my_login</username> -->
            <!-- 鑒權密碼 -->
            <!-- <password>my_password</password> -->
            <!-- 鑒權時使用的私鑰位置。默認是 ${user.home}/.ssh/id_dsa -->
            <!-- <privateKey>${usr.home}/.ssh/id_dsa</privateKey> -->
            <!-- 鑒權時使用的私鑰密碼 -->
            <!-- <passphrase>some_passphrase</passphrase> -->
            <!-- 文件被創建時的權限。如果在部署的時候會創建一個倉庫文件或者目錄,這時候就可以使用該權限。其對應了 unix 文件系統的權限,如:664、775 -->
            <!-- <filePermissions>664</filePermissions> -->
            <!-- 目錄被創建時的權限 -->
            <!-- <directoryPermissions>775</directoryPermissions> -->
        <!-- </server> -->
    <!-- </servers> -->

    <!-- 下載鏡像列表 -->
    <mirrors>
        <!-- 設置多個鏡像只會識別第一個鏡像下載 jar 包-->
        <mirror>
            <!-- 該鏡像的唯一標識符。id 用來區分不同的 mirror 元素 -->
            <id>aliyunmaven</id>
            <!-- 被鏡像的服務器的 id。如果我們要設置了一個 maven 中央倉庫(http://repo.maven.apache.org/maven2/)的鏡像,就需要將該元素設置成 central。
                可以使用 * 表示任意遠程庫。例如:external:* 表示任何不在 localhost 和文件系統中的遠程庫,r1,r2 表示 r1 庫或者 r2 庫,*,!r1 表示除了 r1 庫之外的任何遠程庫 -->
            <mirrorOf>*</mirrorOf>
            <!-- 鏡像名稱 -->
            <name>阿里雲公共倉庫</name>
            <!-- 鏡像的 URL -->
            <url>https://maven.aliyun.com/repository/public</url>
        </mirror>
    </mirrors>

    <!-- 用來配置不同的代理 -->
    <proxies>
        <proxy>
            <!-- 代理的唯一定義符,用來區分不同的代理元素 -->
            <id>myproxy</id>
            <!-- 是否激活。當我們聲明了一組代理,而某個時候只需要激活一個代理的時候 -->
            <active>false</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>

    <!-- 根據環境參數來調整構建配置的列表。對應 pom.xml 中 profile 元素(只包含 id、activation、repositories、pluginRepositories 和 properties 元素)
        如果一個 settings.xml 中的 profile 被激活,它的值會覆蓋任何定義在 pom.xml 中帶有相同 id 的 profile -->
    <profiles>
        <profile>
            <!-- profile 的唯一標識 -->
            <id>test</id>
            <!-- 自動觸發 profile 的條件邏輯。也可通過 activeProfile 元素以及使用 -P 標記激活(如:mvn clean install -P test)
                在 maven 工程的 pom.xml 所在目錄下執行 mvn help:active-profiles 命令可以查看生效的 profile -->
            <activation>
                <!-- 默認是否激活 -->
                <activeByDefault>false</activeByDefault>
                <!-- 當匹配的 jdk 被檢測到,profile 被激活。例如:1.4 激活 JDK1.4、1.4.0_2,而 !1.4 激活所有版本不是以 1.4 開頭的 JDK -->
                <jdk>1.8</jdk>
                <!-- 當匹配的操作系統屬性被檢測到,profile 被激活。os 元素可以定義一些操作系統相關的屬性 -->
                <os>
                    <!-- 激活 profile的 操作系統的名字 -->
                    <name>Windows XP</name>
                    <!--激活 profile 的操作系統所屬家族。如:windows -->
                    <family>Windows</family>
                    <!--激活 profile 的操作系統體系結構 -->
                    <arch>x86</arch>
                    <!--激活p rofile 的操作系統版本 -->
                    <version>5.1.2600</version>
                </os>
                <!-- 如果 maven 檢測到某一個屬性(其值可以在 pom.xml 中通過 ${name} 引用),其擁有對應的 name=值,Profile 就會被激活。如果值字段是空的,
                    那么存在屬性名稱字段就會激活 profile,否則按區分大小寫方式匹配屬性值字段 -->
                <property>
                    <!-- 激活 profile 的屬性的名稱 -->
                    <name>mavenVersion</name>
                    <!-- 激活 profile 的屬性的值 -->
                    <value>2.0.3</value>
                </property>
                <!-- 通過檢測該文件的存在或不存在來激活 profile-->
                <file>
                    <!-- 如果指定的文件存在,則激活 profile -->
                    <exists>${basedir}/file2.properties</exists>
                    <!-- 如果指定的文件不存在,則激活 profile -->
                    <missing>${basedir}/file1.properties</missing>
                </file>
            </activation>
            <!-- 對應 profile 的擴展屬性列表。maven 屬性和 ant 中的屬性一樣,可以用來存放一些值。這些值可以在 pom.xml 中的任何地方使用標記 ${X} 來使用,這里 X 是指屬性的名稱。
                屬性有五種不同的形式,並且都能在 settings.xml 文件中訪問:
                1. env.X:在一個變量前加上 "env." 的前綴,會返回一個 shell 環境變量。例如:"env.PATH" 指代了 $path 環境變量(在 Windows 上是 %PATH%)
                2. project.x:指代了 pom.xml 中對應的元素值。例如:<project><version>1.0</version></project> 通過 ${project.version} 獲得 version 的值
                3. settings.x:指代了 settings.xml 中對應元素的值。例如:<settings><offline>false</offline></settings> 通過 ${settings.offline} 獲得 offline 的值
                4. Java System Properties:所有可通過 java.lang.System.getProperties() 訪問的屬性都能在 pom.xml 中使用該形式訪問,例如:${java.home}
                5. x:在 <properties/> 元素中,或者外部文件中設置,以 ${someVar} 的形式使用
            -->
            <properties>
                <!-- 如果該 profile 被激活,則可以在 pom.xml 中使用 ${user.install} -->
                <user.install>${user.home}/our-project</user.install>
            </properties>
            <!-- 遠程倉庫列表。它是 maven 用來填充構建系統本地倉庫所使用的一組遠程倉庫 -->
            <repositories>
                <!--包含需要連接到遠程倉庫的信息 -->
                <repository>
                    <!-- 遠程倉庫唯一標識 -->
                    <id>codehausSnapshots</id>
                    <!-- 遠程倉庫名稱 -->
                    <name>Codehaus Snapshots</name>
                    <!-- 如何處理遠程倉庫里 releases 的下載 -->
                    <releases>
                        <!-- 是否開啟 -->
                        <enabled>false</enabled>
                        <!-- 該元素指定更新發生的頻率。maven 會比較本地 pom.xml 和遠程 pom.xml 的時間戳。
                            這里的選項是:always(一直),daily(默認,每日),interval:X(這里 X 是以分鍾為單位的時間間隔),或者 never(從不)。 -->
                        <updatePolicy>always</updatePolicy>
                        <!-- 當 maven 驗證構件校驗文件失敗時該怎么做:ignore(忽略),fail(失敗),或者 warn(警告)-->
                        <checksumPolicy>warn</checksumPolicy>
                    </releases>
                    <!-- 如何處理遠程倉庫里快照版本的下載。有了 releases 和 snapshots 這兩組配置,pom.xml 就可以在每個單獨的倉庫中,為每種類型的構件采取不同的策略。
                        例如:可能有人會決定只為開發目的開啟對快照版本下載的支持 -->
                    <snapshots>
                        <enabled/>
                        <updatePolicy/>
                        <checksumPolicy/>
                    </snapshots>
                    <!-- 遠程倉庫 URL -->
                    <url>http://snapshots.maven.codehaus.org/maven2</url>
                    <!-- 用於定位和排序構件的倉庫布局類型。可以是 default(默認)或者 legacy(遺留)-->
                    <layout>default</layout>
                </repository>
            </repositories>
            <!-- 插件的遠程倉庫列表。和 repositories 類似,repositories 管理 jar 包依賴的倉庫,pluginRepositories 則是管理插件的倉庫 -->
            <pluginRepositories>
                <!-- 每個 pluginRepository 元素指定一個 maven 可以用來尋找新插件的遠程地址 -->
                <pluginRepository>
                    <id/>
                    <name/>
                    <releases>
                        <enabled/>
                        <updatePolicy/>
                        <checksumPolicy/>
                    </releases>
                    <snapshots>
                        <enabled/>
                        <updatePolicy/>
                        <checksumPolicy/>
                    </snapshots>
                    <url/>
                    <layout/>
                </pluginRepository>
            </pluginRepositories>
        </profile>
    </profiles>

    <!-- 手動激活 profiles 的列表 -->
    <!-- <activeProfiles> -->
        <!-- 要激活的 profile id。例如:env-test,則在 pom.xml 或 settings.xml 中對應 id 的 profile 會被激活。如果運行過程中找不到對應的 profile 則忽略配置 -->
        <!-- <activeProfile>env-test</activeProfile> -->
  <!-- </activeProfiles> -->
</settings>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM