settings.xml詳解
###1. 前言
setting.xml是maven中設置默認本地倉庫、中央倉庫、鏡像倉庫、插件倉庫、代理的地方,是一個全局配置。先介紹一下基本概念
- 本地倉庫
即緩存maven項目的各類依賴組件的目錄; - 中央倉庫
一個公用的庫,存放了各類開源的組件,默認maven項目的依賴都會去該倉庫下載依賴項的pom.xml和jar包; - 鏡像倉庫
可以理解爲中央倉庫的備機,一般當中央倉庫不可達時或者不穩定時則配置鏡像倉庫屏蔽中央倉庫。 - 插件倉庫
類似中央倉庫,插件也是jar包,所以本質和中央倉庫沒有什麼區別,只是邏輯上概念不一樣。 - 代理
就是maven構建過程中需要訪問互聯網,如果主機不可直達外網,則需要配置代理訪問外網。
2. settings.xml的詳細介紹
2.1. 一級元素介紹
這裏只介紹了我們平常會用的配置,對於<interactiveMode/>、<pluginGroups/>、<offline/>、<usePluginRegistry/>沒有列出。
<settings>
<localRepository></localRepository>
<profiles></profiles>
<activeProfiles></activeProfiles>
<mirrors></mirrors>
<proxies></proxies>
<servers></servers>
</settings>
- localRepository
該配置中用以設置本地倉庫的路徑,在該路徑下緩存中央倉庫依賴項。
<localRepository>/usr/local/maven/repository/</localRepository>
- profiles
該項用以配置多組maven的中央倉庫、插件倉庫以及他們的使用時機。 - activationProfiles
profiles中存在多組配置,該項用以配置自動生效的配置項。
<activeProfiles>
<activeProfile>id_of_profile</activeProfile>
</activeProfiles>
- mirrors
當某個中央倉庫不穩定或者不可達時,在該配置項中配置 - proxies
配置maven使用的代理 - servers
配置倉庫、部署服務器的密令參數,有些倉庫需要密令,另外項目部署到多臺服務器時也需要密令,這裏用以配置服務器密令。
2.2. profiles
<profiles>
<profile>
<id>test</id>
<!-- 配置激活的條件設置 -->
<activation></activation>
<!-- 遠程倉庫配置 -->
<repositories></repositories>
<!-- 遠程插件倉庫配置 -->
<pluginRepository></pluginRepository>
</profile>
</profiles>
- id
配置的唯一標誌 - activation
配置激活的條件
<activation>
<activeByDefault>true</activeByDefault>
<file>
<!-- 文件存在則激活-->
<exits>file_name_2</exits>
<!-- 文件不存在則激活-->
<mssing>file_name_2</mssing>
</file>
<!-- jdk1.8則激活配置-->
<jdk>1.8</jdk>
<!-- 操作系統的激活條件 -->
<os>
<!-- 系統架構 -->
<arch>x86-64</arch>
<!-- 族系 -->
<family>Linux</family>
<!-- 名稱 -->
<name>Centos</name>
<!-- 版本 -->
<version>7.0</version>
</os>
<!-- 定義變量激活,如果存在變量hello且值爲world,則激活,另外如果value爲空,則只要存在變量hello則激活 -->
<property>
<name>hello</name>
<value>world</value>
</property>
</activation>
- repositories
配置倉庫
<repositories>
<repository>
<!-- 倉庫的id和名,都是自定義的 -->
<id>central</id>
<name>the central repo</name>
<!-- 倉庫的url -->
<url>https://repo.maven.apache.org/maven2/</url>
<!-- 指定更新該庫中release版本依賴的策略-->
<releases>
<!-- 是否開啓更新-->
<enable>true</enable>
<!-- 更新策略,always, daily, interval:5,never; interval的單位是minute,never表示的是如果本地庫不存在也不會去下載,默認爲daily -->
<updatePolicy>always</updatePolicy>
<!-- 如果校驗插件的校驗和失敗採取的動作 -->
<checksumPolicy>warn</checksumPolicy>
</releases>
<!-- snapshots版本的依賴項更新策略,和releases類似-->
<snapshots>
<enabled>false</enabled>
<updatePolicy>daily</updatePolicy>
<checksumPolicy>error</checksumPolicy>
</snapshots>
<!-- maven倉庫的佈局,即目錄的組織格式,目前都已統一,都爲default -->
<layout>default</layout>
</repository>
</repositories>
-
pluginRepositories
配置插件倉庫<pluginRepository> <id>central</id> <name>central plugin repository</name> <url>https://repo.maven.apache.org/maven2/</url> <releases> <enabled>true</enabled> <!--半天更新一次 --> <updatePolicy>interval:720</updatePolicy> <checksumPolicy>warn</checksumPolicy> <layout>default</layout> </releases> <snapshots></snapshots> </pluginRepository>
2.3. mirrors
配置倉庫鏡像
<mirrors> <mirror> <id>mirror_test</id> <name> mirror of central </name> <!-- 鏡像的url--> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> <!-- 被鏡像的庫的id --> <mirrorOf>central</mirrorOf> </mirror> </mirrors
2.4. proxies
配置訪問網絡的代理, 內網請求也會被代理
<proxies> <proxy> <id>web-proxy</id> <!--http://user@host:port/--> <protocol>http</protocol> <username>rtx</username> <password>passwd</password> <host>localhost</host> <port>8080</port> <!-- 無需代理的域名,主機等--> <nonProxyHosts>*.oa.com | localhost</nonProxyHosts> <!-- 代理是否生效,默認是false的 --> <active>true</active> </proxy> </proxies>
2.5. servers
配置服務器登錄命令,包括倉庫和部署服務器
<servers> <server> <!-- 服務器的id, 可能是倉庫,可能是部署服務器--> <id>central</id> <username>user</username> <password>passwd</password> <!-- 如果服務器認證是採取密令認證,需要提供rsa私鑰文件的全路徑 --> <privateKey>~/user/.ssh/id_rsa</privateKey> <!-- 私鑰文件一般加密存儲,需要解密密碼 --> <phrase>prikey_password</phrase> <!-- 部署服務時會創建文件,指定文件的權限 --> <filePermission>744</filePermission> <!-- 部署服務時會創建目錄,指定文件的權限 --> <directoryPermission>744</directoryPermission> <!-- 傳輸層的一些控制,超時之類 --> <configuration></configuration> </server> </servers>
3. 拓展
其實所有的settings.xml中的配置項都可以在其xsd(XML shcema definition)文件中找到對應的解釋。下圖展示了該文件中的部分內容,如果大家想詳細瞭解一個maven配置文件的格式,可以查看對應的xsd文件瞭解。