maven設置------setting.xml文件學習

快速預覽

maven的配置文件爲settings.xml,在下面路徑中可以找到這個文件,分別爲:
    ------ $M2_HOME/conf/settings.xml:全局設置,在maven的安裝目錄下;
    ------ ${user.home}/.m2/settings.xml:用戶設置,需要用戶手動添加,可以將安裝目錄下的settings.xml文件拷貝過來修改。
    兩個文件的關係爲:如果兩個文件同時存在,文件內容將被融合,相同設置將以用戶設置的settings.xml爲準。

 

注意, 剛下載安裝的maven,本地倉庫~/.m2目錄下面是沒有settings.xml 的,

如果要使用配置公司的代碼庫的話,只在安裝目錄下改settings.xml是沒有用的,

一定要把settings.xml 複製到本地的~/.m2目錄下,重啓idea,項目reimport一下pom.xml文件,才能使設置的settings.xml生效。

   這個坑在 Ubuntu系統和 Mac系統下都是一樣的,坑了我好幾天,都快瘋了。。。。

 


    該文件一共有10個配置項,文件結構爲:

 <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>


 下面對每一個配置項做一個簡要的講解,幫助理解每一項的含義和配置方式,以便後面做更深入的學習:

簡單屬性

<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>${user.home}/.m2/repository</localRepository>
	<interactiveMode>true</interactiveMode>
	<usePluginRegistry>false</usePluginRegistry>
	<offline>false</offline>
	...
</settings>

 localRepository:本地倉庫路徑,默認值 ${user.home}/.m2/repository;
  interactiveMode:值爲true/false,true表示mave可以使用用戶輸入,默認true;
  usePluginRegistry:值爲true/false,true表示maven使用${user.home}/.m2/plugin-registry.xml管理插件版本,默認爲false;
  offline:值爲true/false,true表示構建系統在離線模式下執行,默認爲false;

pluginGroups

每個pluginGroup元素都包含一個groupId,當你在命令行中沒有提供插件的groupid時,將會使用該列表。這個列表自動包含org.apache.maven.plugins和org.codehaus.mojo。

<pluginGroups>
	<pluginGroup>org.mortbay.jetty</pluginGroup>
</pluginGroups>

例如:在做了上面的配置後,直接執行如下簡寫形式的命令即可
  mvn jetty:run

servers

POM中的repositories和distributionManagement元素爲下載和部署定義的倉庫。一些設置如服務器的用戶名和密碼不應該和pom.xml一起分發。這種類型的信息應該存在於構建服務器上的settings.xml文件中。

<servers>
	<server>
		<id>server001</id>
		<username>my_login</username>
		<password>my_password</password>
		<privateKey>${user.home}/.ssh/id_dsa</privateKey>
		<passphrase>some_passphrase</passphrase>
		<filePermissions>664</filePermissions>
		<directoryPermissions>775</directoryPermissions>
		<configuration></configuration>
	</server>
</servers>


  id:服務器的id,和repository/mirror中配置的id項匹配;
  username,password:服務器的認證信息;
  privateKey,passphrase:指定一個路徑到一個私有key(默認爲${user.home}/.ssh/id_dsa)和一個passphrase;
  filePermissions,directoryPermissions:設置文件和文件夾訪問權限,對應unix文件權限值,如:664,後者775.
  
  注意:如果你使用一個已有key登錄服務器,你必須忽略<password>項,否則,key將會被忽略。

Mirrors

<mirrors>
	<mirror>
		<id>planetmirror.com</id>
		<name>PlanetMirror Australia</name>
		<url>http://downloads.planetmirror.com/pub/maven2</url>
		<mirrorOf>central</mirrorOf>
	</mirror>
</mirrors>

  id,name:鏡像的唯一標識和用戶友好的名稱;
  url:鏡像的url,用於代替原始倉庫的url;
  mirrorof:使用鏡像的倉庫的id,可以使用下面匹配屬性:
           ------*:匹配所有倉庫id;
           ------external:*:匹配所有倉庫id,除了那些使用localhost或者基於倉庫的文件的倉庫;
           ------多個倉庫id之間用逗號分隔;
           ------!repol:表示匹配所有倉庫,除了repol。
           注意:如果配置了多個倉庫,首先匹配id精確匹配的鏡像,否則maven使用第一個匹配的鏡像。

proxies

代理服務器設置。
<proxy>
	<id>optional</id>
	<active>true</active>
	<protocol>http</protocol>
	<username>proxyuser</username>
	<password>proxypass</password>
	<host>proxy.host.net</host>
	<port>80</port>
	<nonProxyHosts>local.net|some.host.com</nonProxyHosts>
</proxy>
  id:可選,爲代理服務器設置一個名稱;
  active:true/false,默認true;
  protocol:代理服務器使用的協議類型;
  username:用戶名;
  password:密碼;
  host:主機名,或者ip;
  port:端口號;
  nonProxyHosts:不使用代理服務器的主機類型,多個主機之間用'|'分隔,可使用通配符,如:*.somewhere.com。

profiles

  這裏的profile元素是pom.xml的profile元素的一個裁剪版本,它包含activation、repositories、pluginRepositories和properties元素。
  如果一個在settins中的profile是激活的,它的值將覆蓋在一個POM或者profiles.xml文件中的任何相同id的profiles。

Activation

通過Activation來指定profile生效的環境,具體見下:

<profiles>
	<profile>
		<id>test</id>
		<activation>
			<activeByDefault>false</activeByDefault>
			<jdk>1.5</jdk>
			<os>
				<name>Windows XP</name>
				<family>Windows</family>
				<arch>x86</arch>
				<version>5.1.2600</version>
			</os>
			<property>
				<name>mavenVersion</name>
				<value>2.0.3</value>
			</property>
			<file>
				<exists>${basedir}/file2.properties</exists>
				<missing>${basedir}/file1.properties</missing>
			</file>
		</activation>
		...
	</profile>
</profiles>

 activeByDefault:是否自動激活;
   jdk:jdk版本,必須達到該版本後才能執行激活;
   os:操作系統環境信息;
   property:當maven探測到一個name=value值對時,profile才被激活;
   file:文件exists或者missing可以激活該profile。

Properties

  properties中的值可以在一個POM中通過${x}來使用,x比哦是一個property,以下形式在settiongs.xml文件中都可以使用:
   --env.X;表示使用一個環境變量,如:${env.PATH}表示使用PATH環境變量;
   --project.x:標識在POM中的對應元素的值,如:<project><version>1.0</version></project>可以通過${project.version}引用;
   --settings.x:在settins.xml中包含的對應元素的值,如:<settings><offline>false</offline></settings>可以通過${settings.offline}引用;
   --Java System Properties:所有java.lang.System.getProperties()獲取的屬性都是可用的,如:${java.home};
   --x:在<properties/> 中或者一個擴展文件中設置的屬性,如:${someVar};
   配置方式爲:

<profiles>
	<profile>
		...
		<properties>
			<user.install>${user.home}/our-project</user.install>
		</properties>
		...
	</profile>
</profiles>

屬性${user.install}就可以在POM中使用了。

Repositories

倉庫。倉庫是Maven用來填充構建系統本地倉庫所使用的一組遠程項目。而Maven是從本地倉庫中使用其插件和依賴。不同的遠程倉庫可能含有不同的項目,而在某個激活的profile下,可能定義了一些倉庫來搜索需要的發佈版或快照版構件。

<repositories>
	<repository>
		<id>codehausSnapshots</id>
		<name>Codehaus Snapshots</name>
		<releases>
			<enabled>false</enabled>
			<updatePolicy>always</updatePolicy>
			<checksumPolicy>warn</checksumPolicy>
		</releases>
		<snapshots>
			<enabled>true</enabled>
			<updatePolicy>never</updatePolicy>
			<checksumPolicy>fail</checksumPolicy>
		</snapshots>
		<url>http://snapshots.maven.codehaus.org/maven2</url>
		<layout>default</layout>
	</repository>
</repositories>

   releases、snapshots:不同的版本策略,對應發佈版本和快照版本;
   enabled:true/false,對應類型是否激活;
   updatePolicy:更新策略,maven將比較本地POM的時間戳(存儲在倉庫的maven-metadata文件中)和遠端的,配置選項可以設置:always、daily(一天一次,默認),interval:x(x爲一整數,單位分鐘),never;
   checksumPolicy:maven部署文件到倉庫時,也會部署對應的校驗和文件,你可以設置:ignore,fail或者warn用於當校驗和文件不存在或者檢驗失敗時的處理策略;
   layout:上面提到的倉庫大部分都遵循共同的佈局,可以配置:default(默認)或者legacy(遺留);

pluginRepositories

插件倉庫。倉庫是兩種主要構件的家。第一種構件被用作其它構件的依賴。這是中央倉庫中存儲大部分構件類型。另外一種構件類型是插件。Maven插件是一種特殊類型的構件。由於這個原因,插件倉庫獨立於其它倉庫。pluginRepositories元素的結構和repositories元素的結構類似。每個pluginRepository元素指定一個Maven可以用來尋找新插件的遠程地址。

activeProfiles

<activeProfiles>
	<activeProfile>env-test</activeProfile>
</activeProfiles>

activeProfile中間定義activeProfile的id,在這裏定義的activeProfile總是被激活,不關心環境設置,如果配置的id的profile沒有發現,將沒有任何事發生。
 

發佈了164 篇原創文章 · 獲贊 64 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章