多倉庫鏡像設置
<mirrors>
<mirror>
<id>nexus-aliyun</id>
<!--<mirrorOf>*</mirrorOf> -->
<mirrorOf>*,!central</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
<mirror>
<id>offical</id>
<name>Maven Official Repository</name>
<url>http://repo1.maven.org/maven2</url>
<mirrorOf>central</mirrorOf>
</mirror>
<mirror>
<id>central</id>
<name>Central Repository</name>
<url>https://repo.maven.apache.org/maven2</url>
<mirrorOf>central</mirrorOf>
</mirror>
<mirror>
<id>jboss</id>
<name>Jboss Repository</name>
<url>http://repository.jboss.org/nexus/content/groups/public-jboss/</url>
<mirrorOf>central</mirrorOf>
</mirror>
<mirror>
<id>AsposeJavaAPI</id>
<name>Aspose Java API</name>
<url>http://maven.aspose.com/repository/repo</url>
<mirrorOf>*</mirrorOf>
</mirror>
<mirror>
<id>nexus</id>
<url>http://maven.XXcloud.cn/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
setting詳解
<?xml version="1.0" encoding="UTF-8"?>
<!--
| 官方文檔: https://maven.apache.org/settings.html
|
| Maven 提供以下兩種 level 的配置:
|
| 1. User Level. 當前用戶獨享的配置, 通常在 ${user.home}/.m2/settings.xml 目錄下。
| 可在 CLI 命令行中通過以下參數設置: -s /path/to/user/settings.xml
|
| 2. Global Level. 同一臺計算機上的所有 Maven 用戶共享的全局配置。 通常在${maven.home}/conf/settings.xml目錄下。
| 可在 CLI 命令行中通過以下參數設置: -gs /path/to/global/settings.xml
|
| 備註: User Level 優先級 > Global Level
|-->
<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">
<!--
| Maven 依賴搜索順序, 當我們執行 Maven 命令時, Maven 開始按照以下順序查找依賴的庫:
|
| 步驟 1 - 在本地倉庫中搜索, 如果找不到, 執行步驟 2, 如果找到了則執行其他操作。
| 步驟 2 - 在中央倉庫中搜索, 如果找不到, 並且有一個或多個遠程倉庫已經設置, 則執行步驟 4, 如果找到了則下載到本地倉庫中已被將來引用。
| 步驟 3 - 如果遠程倉庫沒有被設置, Maven 將簡單的停滯處理並拋出錯誤(無法找到依賴的文件)。
| 步驟 4 - 在一個或多個遠程倉庫中搜索依賴的文件, 如果找到則下載到本地倉庫已被將來引用, 否則 Maven 將停止處理並拋出錯誤(無法找到依賴的文件)。
|-->
<!-- 地倉庫路徑, 默認值: ${user.home}/.m2/repository -->
<localRepository>${user.home}/workspace/env/maven/repository</localRepository>
<!-- 當 maven 需要輸入值的時候, 是否交由用戶輸入, 默認爲true;false 情況下 maven 將根據使用配置信息進行填充 -->
<interactiveMode>true</interactiveMode>
<!-- 是否支持聯網進行 artifact 下載、 部署等操作, 默認: false -->
<offline>false</offline>
<!--
| 搜索插件時, 如果 groupId 沒有顯式提供時, 則以此處配置的 groupId 爲默認值, 可以簡單理解爲默認導入這些 groupId 下的所有 artifact(需要時才下載)
| 默認情況下該列表包含了 org.apache.maven.plugins和org.codehaus.mojo
|
| 查看插件信息:
| mvn help:describe -Dplugin=org.apache.maven.plugins:maven-compiler-plugin:3.5.1 -Ddetail
|-->
<pluginGroups>
<!-- plugin 的 groupId -->
<!--
<pluginGroup>com.your.plugins</pluginGroup>
-->
</pluginGroups>
<!-- 進行遠程服務器訪問時所需的授權配置信息。通過系統唯一的 server-id 進行唯一關聯 -->
<servers>
<server>
<!-- 這是 server 的 id, 該 id 與 distributionManagement 中 repository 元素的id 相匹配 -->
<id>server_id</id>
<!-- 鑑權用戶名 -->
<username>auth_username</username>
<!-- 鑑權密碼 -->
<password>auth_pwd</password>
<!-- 鑑權時使用的私鑰位置。和前兩個元素類似, 私鑰位置和私鑰密碼指定了一個私鑰的路徑(默認是/home/hudson/.ssh/id_dsa)以及如果需要的話, 一個密鑰 -->
<privateKey>path/to/private_key</privateKey>
<!-- 鑑權時使用的私鑰密碼, 非必要, 非必要時留空 -->
<passphrase>some_passphrase</passphrase>
<!--
| 文件被創建時的權限。如果在部署的時候會創建一個倉庫文件或者目錄, 這時候就可以使用權限(permission)
| 這兩個元素合法的值是一個三位數字, 其對應了unix文件系統的權限, 如664, 或者775
|-->
<filePermissions>664</filePermissions>
<!-- 目錄被創建時的權限 -->
<directoryPermissions>775</directoryPermissions>
<!-- 傳輸層額外的配置項 -->
<configuration></configuration>
</server>
</servers>
<!--
| 從遠程倉庫才下載 artifacts 時, 用於替代指定遠程倉庫的鏡像服務器配置;
|
| 例如當您無法連接上國外的倉庫是, 可以指定連接到國內的鏡像服務器;
|
| pom.xml 和 setting.xml 中配置的倉庫和鏡像優先級關係(mirror 優先級高於 repository):
|
| repository(setting.xml) < repository(pom.xml) < mirror(setting.xml)
|
| 例如, 如果配置了 mirrorOf = *, 則 不管項目的 pom.xml 配置了什麼倉庫, 最終都會被鏡像到 鏡像倉庫
|
| 私服的配置推薦用profile配置而不是mirror
|-->
<mirrors>
<!--
| 【mirro 匹配順序】:
| 多個 mirror 優先級 按照 id字母順序進行排列(即與編寫的順序無關)
| 在第一個 mirror 找不到 artifact, 不會繼續超找下一個鏡像。
| 只有當 mirror 無法鏈接的時候, 纔會嘗試鏈接下一個鏡像, 類似容災備份。
|-->
<!-- 上海交通大學反向代理 -->
<mirror>
<!-- 該鏡像的唯一標識符, id用來區分不同的 mirror 元素, 同時會套用使用 server 中 id 相同授權配置鏈接到鏡像 -->
<id>sjtugmaven</id>
<!-- 鏡像名稱, 無特殊作用, 可視爲簡述 -->
<name>sjtug maven proxy</name>
<!-- 鏡像地址 -->
<url>https://mirrors.sjtug.sjtu.edu.cn/maven-central/</url>
<!-- 被鏡像的服務器的id, 必須與 repository 節點設置的 ID 一致。但是 This must not match the mirror id
| mirrorOf 的配置語法:
| * = 匹配所有遠程倉庫。 這樣所有 pom 中定義的倉庫都不生效
| external:* = 匹配除 localhost、使用 file:// 協議外的所有遠程倉庫
| repo1,repo2 = 匹配倉庫 repo1 和 repo2
| *,!repo1 = 匹配所有遠程倉庫, repo1 除外
|-->
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
<!-- 用來配置不同的代理, 多代理 profiles 可以應對筆記本或移動設備的工作環境: 通過簡單的設置 profile id 就可以很容易的更換整個代理配置 -->
<proxies>
<!-- 代理元素包含配置代理時需要的信息 -->
<proxy>
<!-- 代理的唯一定義符, 用來區分不同的代理元素 -->
<id>example_proxy</id>
<!-- 該代理是否是激活的那個。true則激活代理。當我們聲明瞭一組代理, 而某個時候只需要激活一個代理的時候, 該元素就可以派上用處 -->
<active>false</active>
<!-- 代理的協議 -->
<protocol>https</protocol>
<!-- 代理的主機名 -->
<host>proxy.molo.com</host>
<!-- 代理的端口 -->
<port>443</port>
<!-- 代理服務器認證的登錄名 -->
<username>proxy_user</username>
<!-- 代理服務器認證登錄密碼 -->
<password>proxy_pwd</password>
<!-- 不該被代理的主機名列表。該列表的分隔符由代理服務器指定;例子中使用了豎線分隔符, 使用逗號分隔也很常見 -->
<nonProxyHosts>*.google.com|ibiblio.org</nonProxyHosts>
</proxy>
</proxies>
<!--
| 構建方法的配置清單, maven 將根據不同環境參數來使用這些構建配置。
| settings.xml 中的 profile 元素是 pom.xml 中 profile 元素的裁剪版本。
| settings.xml 負責的是整體的構建過程, pom.xml 負責單獨的項目對象構建過程。
| settings.xml 只包含了id, activation, repositories, pluginRepositories 和 properties 元素。
|
| 如果 settings 中的 profile 被激活, 它的值會覆蓋任何其它定義在 pom.xml 中或 profile.xml 中的相同 id 的 profile。
|
| 查看當前激活的 profile:
| mvn help:active-profiles
|-->
<profiles>
<profile>
<!-- 該配置的唯一標識符 -->
<id>profile_id</id>
<!--
| profile 的激活條件配置;
| 其他激活方式:
| 1. 通過 settings.xml 文件中的 activeProfile 元素進行指定激活。
| 2. 在命令行, 使用-P標記和逗號分隔的列表來顯式的激活, 如: mvn clean package -P myProfile)。
|-->
<activation>
<!-- 是否默認激活 -->
<activeByDefault>false</activeByDefault>
<!-- 內建的 java 版本檢測, 匹配規則: https://maven.apache.org/enforcer/enforcer-rules/versionRanges.html -->
<jdk>9.9</jdk>
<!-- 內建操作系統屬性檢測, 配置規則: https://maven.apache.org/enforcer/enforcer-rules/requireOS.html -->
<os>
<!-- 操作系統 -->
<name>Windows XP</name>
<!-- 操作系統家族 -->
<family>Windows</family>
<!-- 操作系統 -->
<arch>x86</arch>
<!-- 操作系統版本 -->
<version>5.1.2600</version>
</os>
<!--
| 如果Maven檢測到某一個屬性(其值可以在POM中通過${名稱}引用), 並且其擁有對應的名稱和值, Profile就會被激活。
| 如果值字段是空的, 那麼存在屬性名稱字段就會激活profile, 否則按區分大小寫方式匹配屬性值字段
|-->
<property>
<!-- 屬性名 -->
<name>mavenVersion</name>
<!-- 屬性值 -->
<value>2.0.3</value>
</property>
<!-- 根據文件存在/不存在激活profile -->
<file>
<!-- 如果指定的文件存在, 則激活profile -->
<exists>/path/to/active_on_exists</exists>
<!-- 如果指定的文件不存在, 則激活profile -->
<missing>/path/to/active_on_missing</missing>
</file>
</activation>
<!-- 擴展屬性設置。擴展屬性可以在 POM 中的任何地方通過 ${擴展屬性名} 進行引用
|
| 屬性引用方式(包括擴展屬性, 共 5 種屬性可以引用):
|
| env.x : 引用 shell 環境變量, 例如, "env.PATH"指代了 $path 環境變量(在 Linux / Windows 上是 %PATH% ).
| project.x : 引用 pom.xml(根元素就是 project) 中 xml 元素內容.例如 ${project.artifactId} 可以獲取 pom.xml 中設置的 <artifactId /> 元素的內容
| settings.x : 引用 setting.xml(根元素就是 setting) 中 xml 元素內容, 例如 ${settings.offline}
| Java System Properties : 所有可通過 java.lang.System.getProperties() 訪問的屬性都能在通過 ${property_name} 訪問, 例如 ${java.home}
| x : 在 <properties/> 或者 外部文件 中設置的屬性, 都可以 ${someVar} 的形式使用
|
|-->
<properties>
<!-- 在當前 profile 被激活時, ${profile.property} 就可以被訪問到了 -->
<profile.property>this.property.is.accessible.when.current.profile.actived</profile.property>
</properties>
<!-- 遠程倉庫列表 -->
<repositories>
<!--
| releases vs snapshots
| maven 針對 releases、snapshots 有不同的處理策略, POM 就可以在每個單獨的倉庫中, 爲每種類型的 artifact 採取不同的策略
| 例如:
| 開發環境 使用 snapshots 模式實時獲取最新的快照版本進行構建
| 生成環境 使用 releases 模式獲取穩定版本進行構建
| 參見repositories/repository/releases元素
|-->
<!--
| 依賴包不更新問題:
| 1. Maven 在下載依賴失敗後會生成一個.lastUpdated 爲後綴的文件。如果這個文件存在, 那麼即使換一個有資源的倉庫後, Maven依然不會去下載新資源。
| 可以通過 -U 參數進行強制更新、手動刪除 .lastUpdated 文件:
| find . -type f -name "*.lastUpdated" -exec echo {}" found and deleted" \; -exec rm -f {} \;
|
| 2. updatePolicy 設置更新頻率不對, 導致沒有觸發 maven 檢查本地 artifact 與遠程 artifact 是否一致
|-->
<repository>
<!-- 遠程倉庫唯一標識 -->
<id>maven_repository_id</id>
<!-- 遠程倉庫名稱 -->
<name>maven_repository_name</name>
<!-- 遠程倉庫URL, 按protocol://hostname/path形式 -->
<url>http://host/maven</url>
<!--
| 用於定位和排序 artifact 的倉庫佈局類型-可以是 default(默認)或者 legacy(遺留)
| Maven 2爲其倉庫提供了一個默認的佈局;然而, Maven 1.x有一種不同的佈局。我們可以使用該元素指定佈局是default(默認)還是legacy(遺留)
| -->
<layout>default</layout>
<!-- 如何處理遠程倉庫裏發佈版本的下載 -->
<releases>
<!-- 是否允許該倉庫爲 artifact 提供 發佈版 / 快照版 下載功能 -->
<enabled>false</enabled>
<!--
| 每次執行構建命令時, Maven 會比較本地 POM 和遠程 POM 的時間戳, 該元素指定比較的頻率。
| 有效選項是:
| always(每次構建都檢查), daily(默認, 距上次構建檢查時間超過一天), interval: x(距上次構建檢查超過 x 分鐘)、 never(從不)
|
| 重要:
| 設置爲 daily, 如果 artifact 一天更新了幾次, 在一天之內進行構建, 也不會從倉庫中重新獲取最新版本
|-->
<updatePolicy>always</updatePolicy>
<!-- 當 Maven 驗證 artifact 校驗文件失敗時該怎麼做: ignore(忽略), fail(失敗), 或者warn(警告) -->
<checksumPolicy>warn</checksumPolicy>
</releases>
<!-- 如何處理遠程倉庫裏快照版本的下載 -->
<snapshots>
<enabled />
<updatePolicy />
<checksumPolicy />
</snapshots>
</repository>
<!--
國內可用的 maven 倉庫地址(updated @ 2019-02-08):
http://maven.aliyun.com/nexus/content/groups/public
http://maven.wso2.org/nexus/content/groups/public/
http://jcenter.bintray.com/
http://maven.springframework.org/release/
http://repository.jboss.com/maven2/
http://uk.maven.org/maven2/
http://repo1.maven.org/maven2/
http://maven.springframework.org/milestone
http://maven.jeecg.org/nexus/content/repositories/
http://repo.maven.apache.org/maven2
http://repo.spring.io/release/
http://repo.spring.io/snapshot/
http://mavensync.zkoss.org/maven2/
https://repository.apache.org/content/groups/public/
https://repository.jboss.org/nexus/content/repositories/releases/
-->
</repositories>
<!--
| maven 插件的遠程倉庫配置。maven 插件實際上是一種特殊類型的 artifact。
| 插件倉庫獨立於 artifact 倉庫。pluginRepositories 元素的結構和 repositories 元素的結構類似。
|-->
<!--
<pluginRepositories>
<pluginRepository>
<releases>
<enabled />
<updatePolicy />
<checksumPolicy />
</releases>
<snapshots>
<enabled />
<updatePolicy />
<checksumPolicy />
</snapshots>
<id />
<name />
<url />
<layout />
</pluginRepository>
</pluginRepositories>
-->
</profile>
</profiles>
<!--
| 手動激活 profiles 的列表, 按照 profile 被應用的順序定義 activeProfile
| 任何 activeProfile, 不論環境設置如何, 其對應的 profile 都會被激活, maven 會忽略無效(找不到)的 profile
|-->
<!--
<activeProfiles>
<activeProfile>not-exits-profile</activeProfile>
</activeProfiles>
-->
</settings>