settings.xml有什么用?
如果在Eclipse中使用過Maven插件,想必會有這個經驗:配置settings.xml文件的路徑。
settings.xml文件是干什么的,為什么要配置它呢?
從settings.xml的文件名就可以看出,它是用來設置maven參數的配置文件。並且,settings.xml是maven的全局配置文件。而pom.xml文件是所在項目的局部配置。
Settings.xml中包含類似本地倉儲位置、修改遠程倉儲服務器(如阿里雲的遠程倉庫)、認證信息等配置(比如對於某個遠程的倉庫需要用戶名和密碼的話也需要在這個setting.xml中進行配置)。
在setting.xml中配置阿里雲的遠程倉庫:
<mirrors>
<!-- 阿里雲倉庫 -->
<mirror>
<id>alimaven</id>
<mirrorOf>*</mirrorOf>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
</mirror>
<!-- 中央倉庫1 -->
<mirror>
<id>repo1</id>
<mirrorOf>central</mirrorOf>
<name>Human Readable Name for this Mirror.</name>
<url>http://repo1.maven.org/maven2/</url>
</mirror>
<!-- 中央倉庫2 -->
<mirror>
<id>repo2</id>
<mirrorOf>central</mirrorOf>
<name>Human Readable Name for this Mirror.</name>
<url>http://repo2.maven.org/maven2/</url>
</mirror>
</mirrors>
settings.xml文件位置
settings.xml文件一般存在於兩個位置:
全局配置: ${M2_HOME}/conf/settings.xml
用戶配置: user.home/.m2/settings.xmlnote:用戶配置優先於全局配置。user.home/.m2/settings.xmlnote:用戶配置優先於全局配置。 {user.home} 和和所有其他系統屬性只能在3.0+版本上使用。請注意windows和Linux使用變量的區別。
配置優先級
eclipse對於Maven工程中需要注意的是:局部配置優先於全局配置。
配置優先級從高到低:pom.xml> user settings > global settings
如果這些文件同時存在,在應用配置時,會合並它們的內容,如果有重復的配置,優先級高的配置會覆蓋優先級低的。
settings.xml元素詳解
頂級元素概覽
下面列舉了settings.xml中的頂級元素
<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"> <localRepository/> <interactiveMode/> <usePluginRegistry/> <offline/> <pluginGroups/> <servers/> <mirrors/> <proxies/> <profiles/> <activeProfiles/> </settings>
LocalRepository
作用:該值表示構建系統本地倉庫的路徑。
其默認值:~/.m2/repository。
<localRepository>${user.home}/.m2/repository</localRepository>
InteractiveMode
作用:表示maven是否需要和用戶交互以獲得輸入。
如果maven需要和用戶交互以獲得輸入,則設置成true,反之則應為false。默認為true。
<interactiveMode>true</interactiveMode>
UsePluginRegistry
作用:maven是否需要使用plugin-registry.xml文件來管理插件版本。
如果需要讓maven使用文件~/.m2/plugin-registry.xml來管理插件版本,則設為true。默認為false。
<usePluginRegistry>false</usePluginRegistry>
Offline
作用:表示maven是否需要在離線模式下運行。
如果構建系統需要在離線模式下運行,則為true,默認為false。
當由於網絡設置原因或者安全因素,構建服務器不能連接遠程倉庫的時候,該配置就十分有用。
<offline>false</offline>
PluginGroups
作用:當插件的組織id(groupId)沒有顯式提供時,供搜尋插件組織Id(groupId)的列表。
該元素包含一個pluginGroup元素列表,每個子元素包含了一個組織Id(groupId)。
當我們使用某個插件,並且沒有在命令行為其提供組織Id(groupId)的時候,Maven就會使用該列表。默認情況下該列表包含了org.apache.maven.plugins和org.codehaus.mojo。
<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"> ... <pluginGroups> <!--plugin的組織Id(groupId) --> <pluginGroup>org.codehaus.mojo</pluginGroup> </pluginGroups> ... </settings>
Servers
作用:一般,倉庫的下載和部署是在pom.xml文件中的repositories和distributionManagement元素中定義的。然而,一般類似用戶名、密碼(有些倉庫訪問是需要安全認證的)等信息不應該在pom.xml文件中配置,這些信息可以配置在settings.xml中。
<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"> ... <!--配置服務端的一些設置。一些設置如安全證書不應該和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> <!--目錄被創建時的權限。 --> <