maven2 setting文件詳解

 

以下完全照搬官網:http://maven.apache.org/settings.html  只是加上一點自己的理解而已
可以具有兩個setting文件:
1.$M2_HOME/conf/settring.xml安裝Maven就有的系統setting(各個用戶有效的全局的)
2.${user.home}/.m2/settring.xml用戶自己加在Repository裏的setting文件(用戶級的)

元素總覽:

<settings xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/settings-1.0.0.xsd">
<localRepository/>
<interactiveMode/>
<usePluginRegistry/>
<offline/>
<pluginGroups/>
<servers/>
<mirrors/>
<proxies/>
<profiles/>
<activeProfiles/>
</settings>
localRepository:配置本地的Repository路徑,可以是絕對路徑,通常寫的是${user.home}/.m2/repository interactiveMode:是否希望maven與用戶輸入進行交互,true的話,maven就有可能與用戶交互,默認是true usePluginRegistry:如果需要使用${user.home}/.m2/plugin-registry.xml來控制plugin的版本的話,就是true,現在默認爲false,因爲maven2.0,不建議依賴這個文件 offline: 是否爲離線運行狀態,默認爲false,對於不能夠使用遠程Repository的,使用true pluginGroups: 包含一組pluginGroup元素,如果在命令行上沒有聲明使用某個插件,又要用到這個插件,就在這裏的pluginGroup裏聲明。這個列表默認包括org.maven.plugins Servers:Repositories的詳細定義在pom.xml的distributionManagement中,但是

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

這些是在這裏定義的。
id:與distributionManagement中的repository中的元素id對應,用於表示一個server
username,password:如果server需要驗證的話,這一對元素就是用於驗證的
privateKey, passphrase:也是用於服務器驗證的,前者指定私鑰privateKey(默認${user.home}/.ssh/id_dsa),後者指定口號passphrase
filePermissions, directoryPermissions:使用linux中的三位數字形式標示文件與路徑的權限,例如664,775等。
注意:如果使用私鑰登錄服務器的話,那麼password就省略,否則,私鑰會被忽略。
configuration:官網也沒有解釋。

Mirrors

    <mirror>
      <id>planetmirror.com</id>
      <name>PlanetMirror Australia</name>
      <url>http://downloads.planetmirror.com/pub/maven2</url>
      <mirrorOf>central</mirrorOf>
    </mirror>
id,name:server鏡像的唯一標識與可讀性強的名稱(id纔是唯一的)

url:mirror的地址
mirrorOf:指定這個鏡像代表的server的id,那麼以後工程引用這個server的時候將不會使用server而是變成使用mirror的地址

In 2.0.9+, an enhanced syntax is supported:

  • * matches all repo ids.
  • external:* matches all repos except those using localhost or file based repositories. This is used in conjunction with a repository manager when you want to exclude redirecting repositories that are defined for Integration Testing.
  • multiple repos may be specified using , as the delimiter
  • ! may be used in conjunction with one of the above wildcards to exclude a repo id.

The order is not important from left to right as the wildcards defer to further processing and explicit includes or excludes stop the processing. Additionally, the mirror list will now be ordered using a LinkedHashMap instead of HashMap such that the user may influence match order by changing the order of the definitions in the settings.xml

Examples:

  • * = everything
  • external:* = everything not on the localhost and not file based.
  • repo,repo1 = repo or repo1
  • *,!repo1 = everything except repo1

Proxies

    <proxy>
      <id>myproxy</id>
      <active>true</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>
id:表示不同的proxy
active:當有多個proxy的時候,只有active爲true的時候纔是有效的
protocol,host,port:協議,主機,端口
username,password:如果需要的話就加上
nonProxyHosts:排除不用代理的站點,使用“|”或者“,”符號分開不同站點,可以使用通配符“*”

profiles

activation, repositories, pluginRepositories and properties elements
    activation指定激活這個profile的條件。其他激活的方法:(1)setting.xml可以通過activeProfile元素指定profile的id,來明確地激活這個profile。(2)在命令行上加上-P profile的id,也可以激活這個profile,其中可以通過“,”分開幾個profile的id來指定多個。
    repositories包含的repository指定依賴,它之前的activation如果符合激活條件的話就開啓這個依賴
    pluginRepositories和properties也一樣,如果activation符合激活條件,則它們將被激活
例子1:如果使用jdk-1.4的話,jdk的依賴將會被激活

    <profile>
      <id>jdk-1.4</id>

      <activation>
        <jdk>1.4</jdk>
      </activation>

      <repositories>
        <repository>
   <id>jdk14</id>
   <name>Repository for JDK 1.4 builds</name>
   <url>http://www.myhost.com/maven/jdk14</url>
   <layout>default</layout>
   <snapshotPolicy>always</snapshotPolicy>
 </repository>
      </repositories>
    </profile>

例子2:如果target-env的屬性值爲dev的時候,就激活tomcatPath的屬性,其他地方肯定會有元素引用這個屬性,例如後面引用

    <profile>
      <id>env-dev</id>

      <activation>
        <property>
   <name>target-env</name>
   <value>dev</value>
 </property>
      </activation>

      <properties>
        <tomcatPath>/path/to/tomcat/instance</tomcatPath>
      </properties>
    </profile>
    -->
  </profiles>

引用tomcatPath
     | <plugin>
     |   <groupId>org.myco.myplugins</groupId>
     |   <artifactId>myplugin</artifactId>
     |  
     |   <configuration>
     |     <tomcatLocation>${tomcatPath}</tomcatLocation>
     |   </configuration>
     | </plugin>


Properties

屬性的引用可以通過${},其中:
1)env.***是引用命令行comandline參數既環境變量等參數的值,例如%{env.PATH}引用環境變量path的值
2)project.***引用pom文件中project的元素值,例如pom中有個<project><version>1.0</version></project>,那麼可以%{project.version}
3)setting.***引用setting文件中的元素值,例如:<settings><offline>false</offline></settings> is accessible via ${settings.offline}
4)java.***,java System Properties:在java語言中可以通過java.lang.System.getProperties() 獲得的值都可以通過此來獲得,例如:${java.home}
5)***是在<properties/>中定義了的可以直接引用的屬性,方法%{someVar}。

Repositories

     <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>
1)releases, snapshots:(理解不了,原文照搬)These are the policies for each type of artifact, Release or snapshot. With these two sets, a POM has the power to alter the policies for each type independent of the other within a single repository. For example, one may decide to enable only snapshot downloads, possibly for development purposes.
2)enabled:true或者false來指明這個repository哪個類型被開啓
3)updatePolicy:升級策略。The choices are: always, daily (default), interval:X (where X is an integer in minutes) or never
4)checksumPolicy:When Maven deploys files to the repository, it also deploys corresponding checksum files. options are to ignore, fail, or warn on missing or incorrect checksums
5)layout:In the above description of repositories, it was mentioned that they all follow a common layout. This is mostly correct. Maven 2 has a default layout for its repositories; however, Maven 1.x had a different layout. Use this element to specify which if it is default or legacy.

Plugin Repositories

結構如同Repositories,但是可以這樣理解,repositories用於工程運行之前的,plugin Repositories用於運行。例如tomcat jetty等都是plugins,而jdk,jar等運行之前的工程編譯時候就已經用到了

activeProfiles如上所說,可以指定一定激活的profile
activeProfiles
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章