Maven之pom.xml与setting.xml配置文件详解

.pom.xml详解

1.概述

pom中节点如下分布

<project 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/maven-4.0.0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <!-- 基本配置 -->

    <groupId>...</groupId>

    <artifactId>...</artifactId>

    <version>...</version>

    <packaging>...</packaging>

    <!-- 依赖配置 -->

    <dependencies>...</dependencies>

    <parent>...</parent>

    <dependencyManagement>...</dependencyManagement>

    <modules>...</modules>

    <properties>...</properties>

    <!-- 构建配置 -->

    <build>...</build>

    <reporting>...</reporting>

    <!-- 项目信息 -->

    <name>...</name>

    <description>...</description>

    <url>...</url>

    <inceptionYear>...</inceptionYear>

    <licenses>...</licenses>

    <organization>...</organization>

    <developers>...</developers>

    <contributors>...</contributors>

    <!-- 环境设置 -->

    <issueManagement>...</issueManagement>

    <ciManagement>...</ciManagement>

    <mailingLists>...</mailingLists>

    <scm>...</scm>

    <prerequisites>...</prerequisites>

    <repositories>...</repositories>

    <pluginRepositories>...</pluginRepositories>

    <distributionManagement>...</distributionManagement>

    <profiles>...</profiles>

</project>

2. 基本配置


modelVersionpom模型版本,maven23只能为4.0.0

groupId:组IDmaven用于定位

artifactId:在组中的唯一ID用于定位

version:项目版本

packaging:项目打包方式,有以下值:pom, jar, maven-plugin, ejb, war, ear, rar, par

3. 依赖配置

3.1 parent

用于确定父项目的坐标。

   <parent>

    <groupId>com.learnPro</groupId>

    <artifactId>SIP-parent</artifactId>

    <relativePath></relativePath>

    <version>0.0.1-SNAPSHOT</version>

</parent>

groupId:父项目的构件标识符

artifactId:父项目的唯一标识符

relativePathMaven首先在当前项目的找父项目的pom,然后在文件系统的这个位置(relativePath),然后在本地仓库,再在远程仓库找。

version:父项目的版本


3.2 modules

有些maven项目会做成多模块的,这个标签用于指定当前项目所包含的所有模块。之后对这个项目进行的maven操作,会让所有子模块也进行相同操作。

 <modules>

   <module>com-a</>

   <module>com-b</>

   <module>com-c</>

</>


3.3 properties

用于定义pom常量

<properties>

    <java.version>1.7</java.version>

</properties>

上面这个常量可以在pom文件的任意地方通过${java.version}来引用



3.4 dependencies

项目相关依赖配置,如果在父项目写的依赖,会被子项目引用,一般父项目会将子项目公用的依赖引入(将在之后详细讲解)

<dependencies> 

    <dependency>

            <groupId>junit</groupId>

            <artifactId>junit</artifactId>

            <version>4.12</version>

    </dependency>

</dependencies>

这边依赖和中央仓库中的一致,就可以引入对应的jar


3.5 dependencyManagement

配置写法同dependencies

<dependencyManagement>

    <dependencies>

    .....

    </dependencies>

</dependencyManagement>

在父模块中定义后,子模块不会直接使用对应依赖,但是在使用相同依赖的时候可以不加版本号:

父项目:

<dependencyManagement>

    <dependencies>

        <dependency>

            <groupId>junit</groupId>

            <artifactId>junit</artifactId>

            <version>4.12</version>

            <scope>test</scope>

        </dependency>

    </dependencies>

</dependencyManagement>

子项目:

<dependency>

    <groupId>junit</groupId>

    <artifactId>junit</artifactId>

</dependency>

这样的好处是,父项目统一了版本,而且子项目可以在需要的时候才引用对应的依赖

4. 构建配置


4.1 build


用于配置项目构建相关信息

 <build>    

    <!--该元素设置了项目源码目录,当构建项目的时候,构建系统会编译目录里的源码。该路径是相对于pom.xml的相对路径。-->    

    <sourceDirectory/>    

    <!--该元素设置了项目脚本源码目录,该目录和源码目录不同:绝大多数情况下,该目录下的内容 会被拷贝到输出目录(因为脚本是被解释的,而不是被编译的)。-->    

  <scriptSourceDirectory/>    

  <!--该元素设置了项目单元测试使用的源码目录,当测试项目的时候,构建系统会编译目录里的源码。该路径是相对于pom.xml的相对路径。-->    

  <testSourceDirectory/>   

 

  <!--被编译过的应用程序class文件存放的目录。-->    

  <outputDirectory/>    

 

  <!--被编译过的测试class文件存放的目录。-->    

  <testOutputDirectory/>   

 

  <!--使用来自该项目的一系列构建扩展-->  

  <extensions>    

   <!--描述使用到的构建扩展。-->    

   <extension>    

    <!--构建扩展的groupId-->    

    <groupId/>    

    <!--构建扩展的artifactId-->    

    <artifactId/>    

    <!--构建扩展的版本-->    

    <version/>    

   </extension>    

  </extensions>   

 

  <!--当项目没有规定目标(Maven2 叫做阶段)时的默认值-->    

  <defaultGoal/>    

  <!--这个元素描述了项目相关的所有资源路径列表,例如和项目相关的属性文件,这些资源被包含在最终的打包文件里。-->    

 

  <resources>    

   <!--这个元素描述了项目相关或测试相关的所有资源路径-->    

   <resource>    

    <!-- 描述了资源的目标路径。该路径相对target/classes目录(例如${project.build.outputDirectory})。举个例 子,如果你想资源在特定的包里(org.apache.maven.messages),你就必须该元素设置为org/apache/maven /messages。然而,如果你只是想把资源放到源码目录结构里,就不需要该配置。-->    

    <targetPath/>    

    <!--是否使用参数值代替参数名。参数值取自properties元素或者文件里配置的属性,文件在filters元素里列出。-->    

    <filtering/>    

    <!--描述存放资源的目录,该路径相对POM路径-->    

    <directory/>    

    <!--包含的模式列表,例如**/*.xml.-->    

    <includes/>    

    <!--排除的模式列表,例如**/*.xml-->    

    <excludes/>    

   </resource>    

  </resources>    

 

 

  <!--这个元素描述了单元测试相关的所有资源路径,例如和单元测试相关的属性文件。-->    

  <testResources>    

   <!--这个元素描述了测试相关的所有资源路径,参见build/resources/resource元素的说明-->    

   <testResource>    

    <targetPath/><filtering/><directory/><includes/><excludes/>    

   </testResource>    

  </testResources>    

 

  <!--构建产生的所有文件存放的目录-->    

  <directory/> 

   

  <!--产生的构件的文件名,默认值是${artifactId}-${version}。-->    

  <finalName/>  

  

  <!--当filtering开关打开时,使用到的过滤器属性文件列表-->    

  <filters/>    

  <!--子项目可以引用的默认插件信息。该插件配置项直到被引用时才会被解析或绑定到生命周期。给定插件的任何本地配置都会覆盖这里的配置-->    

 

  <pluginManagement>    

   <!--使用的插件列表 。-->    

   <plugins>    

    <!--plugin元素包含描述插件所需要的信息。-->    

    <plugin>    

     <!--插件在仓库里的group ID-->    

     <groupId/>    

     <!--插件在仓库里的artifact ID-->    

     <artifactId/>    

     <!--被使用的插件的版本(或版本范围)-->    

     <version/>    

     <!--是否从该插件下载Maven扩展(例如打包和类型处理器),由于性能原因,只有在真需要下载时,该元素才被设置成enabled。-->    

     <extensions/>    

     <!--在构建生命周期中执行一组目标的配置。每个目标可能有不同的配置。-->    

     <executions>    

      <!--execution元素包含了插件执行需要的信息-->    

      <execution>    

       <!--执行目标的标识符,用于标识构建过程中的目标,或者匹配继承过程中需要合并的执行目标-->    

       <id/>    

       <!--绑定了目标的构建生命周期阶段,如果省略,目标会被绑定到源数据里配置的默认阶段-->    

       <phase/>    

       <!--配置的执行目标-->    

       <goals/>    

       <!--配置是否被传播到子POM-->    

       <inherited/>    

       <!--作为DOM对象的配置-->    

       <configuration/>    

      </execution>    

     </executions>    

     <!--项目引入插件所需要的额外依赖-->    

     <dependencies>    

      <!--参见dependencies/dependency元素-->    

      <dependency>    

       ......    

      </dependency>    

     </dependencies>         

     <!--任何配置是否被传播到子项目-->    

     <inherited/>    

     <!--作为DOM对象的配置-->    

     <configuration/>    

    </plugin>    

   </plugins>    

  </pluginManagement>    

 

 

  <!--使用的插件列表-->    

  <plugins>    

   <!--参见build/pluginManagement/plugins/plugin元素-->    

   <plugin>    

    <groupId/><artifactId/><version/><extensions/>    

    <executions>    

     <execution>    

      <id/><phase/><goals/><inherited/><configuration/>    

     </execution>    

    </executions>    

    <dependencies>    

     <!--参见dependencies/dependency元素-->    

     <dependency>    

      ......    

     </dependency>    

    </dependencies>    

    <goals/><inherited/><configuration/>    

   </plugin>    

  </plugins>    

 </build>

4.2 reporting

该元素描述使用报表插件产生报表的规范。当用户执行mvn site”,这些报表就会运行。 在页面导航栏能看到所有报表的链接。

<reporting>

  <!--true,则,网站不包括默认的报表。这包括“项目信息”菜单中的报表。-->    

  <excludeDefaults/>    

  <!--所有产生的报表存放到哪里。默认值是${project.build.directory}/site。-->    

  <outputDirectory/>    

  <!--使用的报表插件和他们的配置。-->    

  <plugins>    

   <!--plugin元素包含描述报表插件需要的信息-->    

   <plugin>    

    <!--报表插件在仓库里的group ID-->    

    <groupId/>    

    <!--报表插件在仓库里的artifact ID-->    

    <artifactId/>    

    <!--被使用的报表插件的版本(或版本范围)-->    

    <version/>    

    <!--任何配置是否被传播到子项目-->    

    <inherited/>    

    <!--报表插件的配置-->    

    <configuration/>    

    <!--一组报表的多重规范,每个规范可能有不同的配置。一个规范(报表集)对应一个执行目标 。例如,有1,2,3,4,5,6,7,8,9个报表。1,2,5构成A报表集,对应一个执行目标。2,5,8构成B报表集,对应另一个执行目标-->    

    <reportSets>    

     <!--表示报表的一个集合,以及产生该集合的配置-->    

     <reportSet>    

      <!--报表集合的唯一标识符,POM继承时用到-->    

      <id/>    

      <!--产生报表集合时,被使用的报表的配置-->    

      <configuration/>    

      <!--配置是否被继承到子POMs-->    

      <inherited/>    

      <!--这个集合里使用到哪些报表-->    

      <reports/>    

     </reportSet>    

    </reportSets>    

   </plugin>    

  </plugins>    

 </reporting>

5. 项目信息

name:给用户提供更为友好的项目名

description:项目描述,maven文档中保存

url:主页的URLmaven文档中保存

inceptionYear:项目创建年份,4位数字。当产生版权信息时需要使用这个值

licenses:该元素描述了项目所有License列表。 应该只列出该项目的license列表,不要列出依赖项目的license列表。如果列出多个license,用户可以选择它们中的一个而不是接受所有license。(如下)

<license>

    <!--license用于法律上的名称-->    

    <name>...</name>     

    <!--官方的license正文页面的URL-->    

    <url>....</url>

    <!--项目分发的主要方式:repo,可以从Maven库下载 manual, 用户必须手动下载和安装依赖-->    

    <distribution>repo</distribution>     

    <!--关于license的补充信息-->    

    <comments>....</comments>     

</license> 

organization1.name组织名2.url组织主页url

developers:项目开发人员列表(如下)

contributors:项目其他贡献者列表,同developers

<developers>

    <!--某个开发者信息-->

    <developer>  

        <!--开发者的唯一标识符-->

        <id>....</id>  

        <!--开发者的全名-->

        <name>...</name>  

        <!--开发者的email-->

        <email>...</email>  

        <!--开发者的主页-->

        <url>...<url/>

        <!--开发者在项目中的角色-->

        <roles>  

            <role>Java Dev</role>  

            <role>Web UI</role>  

        </roles> 

        <!--开发者所属组织--> 

        <organization>sun</organization>  

        <!--开发者所属组织的URL-->

        <organizationUrl>...</organizationUrl>  

        <!--开发者属性,如即时消息如何处理等-->

        <properties>

            <!-- 和主标签中的properties一样,可以随意定义子标签 -->

        </properties> 

        <!--开发者所在时区, -11到12范围内的整数。--> 

        <timezone>-5</timezone>  

    </developer>  

</developers>  

6.环境设置


6.1 issueManagement

目的问题管理系统(Bugzilla, Jira, Scarab)的名称和URL

<issueManagement>

    <system>Bugzilla</system>

    <url>http://127.0.0.1/bugzilla/</url>

</issueManagement>

system:系统类型

url:路径


6.2 ciManagement

项目的持续集成信息

 <ciManagement>

    <system>continuum</system>

    <url>http://127.0.0.1:8080/continuum</url>

    <notifiers>

      <notifier>

        <type>mail</type>

        <sendOnError>true</sendOnError>

        <sendOnFailure>true</sendOnFailure>

        <sendOnSuccess>false</sendOnSuccess>

        <sendOnWarning>false</sendOnWarning>

        <address>[email protected]</address>

        <configuration></configuration>

      </notifier>

    </notifiers>

  </ciManagement>

system:持续集成系统的名字

url:持续集成系统的URL

notifiers:构建完成时,需要通知的开发者/用户的配置项。包括被通知者信息和通知条件(错误,失败,成功,警告)

type:通知方式

sendOnError:错误时是否通知

sendOnFailure:失败时是否通知

sendOnSuccess:成功时是否通知

sendOnWarning:警告时是否通知

address:通知发送到的地址

configuration:扩展项

6.3 mailingLists

项目相关邮件列表信息

  <mailingLists>

    <mailingList>

      <name>User List</name>

      <subscribe>[email protected]</subscribe>

      <unsubscribe>user-unsubscribe@127.0.0.1</unsubscribe>

      <post>[email protected]</post>

      <archive>http://127.0.0.1/user/</archive>

      <otherArchives>

   <otherArchive>http://base.google.com/base/1/127.0.0.1</otherArchive>

      </otherArchives>

    </mailingList>

    .....

  </mailingLists>

subscribe, unsubscribe: 订阅邮件(取消订阅)的地址或链接,如果是邮件地址,创建文档时,mailto:链接会被自动创建

archive:浏览邮件信息的URL

post:接收邮件的地址


6.4 scm

允许你配置你的代码库,供Maven web站点和其它插件使用

  <scm>

    <connection>scm:svn:http://127.0.0.1/svn/my-project</connection>

    <developerConnection>scm:svn:https://127.0.0.1/svn/my-project</developerConnection>

    <tag>HEAD</tag>

    <url>http://127.0.0.1/websvn/my-project</url>

  </scm>

connection, developerConnection:这两个表示我们如何连接到maven的版本库。connection只提供读,developerConnection将提供写的请求

写法如:scm:[provider]:[provider_specific]

如果连接到CVS仓库,可以配置如下:scm:cvs:pserver:127.0.0.1:/cvs/root:my-project

tag:项目标签,默认HEAD

url:共有仓库路径


6.5 prerequisites

项目构建的前提

<prerequisites>

    <maven>2.0.6</maven>

</prerequisites>


6.6 repositories,pluginRepositories

依赖和扩展的远程仓库列表,同setting.xml配置中介绍的。

  <repositories>

    <repository>

      <releases>

        <enabled>false</enabled>

        <updatePolicy>always</updatePolicy>

        <checksumPolicy>warn</checksumPolicy>

      </releases>

      <snapshots>

        <enabled>true</enabled>

        <updatePolicy>never</updatePolicy>

        <checksumPolicy>fail</checksumPolicy>

      </snapshots>

      <id>codehausSnapshots</id>

      <name>Codehaus Snapshots</name>

      <url>http://snapshots.maven.codehaus.org/maven2</url>

      <layout>default</layout>

    </repository>

  </repositories>

  <pluginRepositories>

    ...

  </pluginRepositories>

releases, snapshots:这是各种构件的策略,release或者snapshot。这两个集合,POM就可以根据独立仓库任意类型的依赖改变策略。如:一个人可能只激活下载snapshot用来开发。

enabletrue或者false,决定仓库是否对于各自的类型激活(release或者snapshot)

updatePolicy: 这个元素决定更新频率。maven将比较本地pom的时间戳(存储在仓库的maven数据文件中)和远程的.有以下选择: always, daily (默认), interval:X (x是代表分钟的整型)never.

checksumPolicy:当Maven向仓库部署文件的时候,它也部署了相应的校验和文件。可选的为:ignorefailwarn,或者不正确的校验和。

layout:在上面描述仓库的时候,提到他们有统一的布局。Maven 2有它仓库默认布局。然而,Maven 1.x有不同布局。使用这个元素来表明它是default还是legacy


6.7 distributionManagement

它管理的分布在整个构建过程生成的工件和支持文件

   <distributionManagement>

    ...

    <downloadUrl>http://mojo.codehaus.org/my-project</downloadUrl>

    <status>deployed</status>

  </distributionManagement>

downloadUrl: 其他pom可以通过此url的仓库抓取组件

status:给出该构件在远程仓库的状态

none: 默认

converted: 将被早期Maven 2 POM转换过来

partner: 这个项目会从合作者仓库同步过来

deployed: Maven 23实例部署

verified: 被核实时正确的和最终的


6.8 Repository

指定Maven pom从远程下载控件到当前项目的位置和方式,如果snapshotRepository没有被定义则使用repository相关的配置

<distributionManagement>

    <repository>

      <uniqueVersion>false</uniqueVersion>

      <id>corp1</id>

      <name>Corporate Repository</name>

      <url>scp://repo/maven2</url>

      <layout>default</layout>

    </repository>

    <snapshotRepository>

      <uniqueVersion>true</uniqueVersion>

      <id>propSnap</id>

      <name>Propellors Snapshots</name>

      <url>sftp://propellers.net/maven</url>

      <layout>legacy</layout>

    </snapshotRepository>

    ...

  </distributionManagement>

id, name:仓库的唯一标识

uniqueVersiontruefalse,指明控件部署的时候是否获取独立的版本号。

urlrepository元素的核心。指定位置和部署协议发布控件到仓库。

layout:布局,defaultlegacy

6.9 Site Distribution

多分布存储库,distributionManagement负责定义如何部署项目的网站和文档。

 <distributionManagement>

    ...

    <site>

      <id>mojo.website</id>

      <name>Mojo Website</name>

      <url>scp://beaver.codehaus.org/home/projects/mojo/public_html/</url>

    </site>

    ...

  </distributionManagement>

id, name, url: 这些元素与distributionManagement repository中的相同

6.10 Relocation

重新部署-项目不是静态的,是活的。他们需要被搬到更合适的地方。如:当你的下个成功的开源项目移到Apache下,重命名为org.apache:my-project:1.0对你项目更有好处。

 <distributionManagement>

    ...

    <relocation>

      <groupId>org.apache</groupId>

      <artifactId>my-project</artifactId>

      <version>1.0</version>

      <message>We have moved the Project underApache</message>

    </relocation>

    ...

  </distributionManagement>

6.11 profiles

profile可以让我们定义一系列的配置信息(插件等),然后指定其激活条件

profile的相关配置可以参考–setting.xml详解



二. setting.xml详解


1.文件概览




<?xml version="1.0" encoding="UTF-8"?>

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

    <offline/>

    <pluginGroups/>

    <servers/>

    <mirrors/>

    <proxies/>

    <profiles/>

    <activeProfiles/>

</settings>


通过配置文件中的注释,我们可以看到,有两种配置此文件的方法


1.用户级别

${user.home}/.m2/settings.xml

可以通过指令 -s /path/to/user/settings.xml

2.全局级别

${maven.home}/conf/settings.xml.

可以通过指令 -gs /path/to/global/settings.xml


2.localRepository


localRepository用于构建系统的本地仓库的路径。

默认的值是${user.home}/.m2/repository

    Default: ${user.home}/.m2/repository

  <localRepository>/path/to/local/repo</localRepository>


3.interactiveMode


interactiveMode 用于决定maven是否在需要输出的时候提示你,默认true。如果是false,它将使用合理的默认值,或者基于一些设置。



4.offline


决定maven是否在构建的时候进行网络传输。

默认false,表示联网状态,true为取消联网。

在某些情况下设置为true是很有用的,比如jar无法从网上下载等




5.pluginGroups


pluginGroups 插件组

<pluginGroups>

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

 </pluginGroups>

这样Maven可以使用简单的命令执行org.morbay.jetty:jetty-maven-plugin:run

mvn jetty run

我们同样可以在pom文件中看到相似的配置,只是在这配置了就起到全局的作用,而不用每个项目中pom配置jetty


6.proxies



此项用于设置http代理

有时候由于安全问题,需要配置http代理,通过代理服务才能正常访问外部仓库下载资源可以ping repo1.maven.org来访问中央仓库

telnet 218.14.227.197 3128 来查看代理地址以及端口是否畅通


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

  </proxies>


idproxy的唯一标识,用来区别proxy元素。

active:表示是否激活代理,如果配置多个,默认是第一个生效

usernamepassword:提供连接代理服务器时的认证。

hostport:主机地址,端口号

nonProxyHosts:用来表示哪些主机名不需要代理,可以用|来分

割多个,此外也支持通配符,

如:*.goole.com表示所有以goole.com结尾的都不需要通过代理



7.servers


这是一个认证配置的列表,根据系统中使用的server-id控制。认证配置在maven连接到远程服务时使用。

<servers>

    <!--使用登录方式-->

    <server>

          <id>deploymentRepo</id>

          <username>repouser</username>

          <password>repopwd</password>

        </server>

        <!-- 使用秘钥认证 -->

        <server>

          <id>siteServer</id>

          <privateKey>/path/to/private/key</privateKey>

          <passphrase>可空</passphrase>

        </server>

</servers>


8.mirrors



指定镜像仓库位置用于从远程仓库下载资源

<mirrors>

    <mirror>

      <id>mirrorId</id>

      <mirrorOf>repositoryId</mirrorOf>

      <name>Human Readable Name for this Mirror.</name>

      <url>http://my.repository.com/repo/path</url>

    </mirror>

</mirrors>

id:用于继承和直接查找,唯一

mirrorOf:镜像所包含的仓库的Id

name:唯一标识,用于区分镜像站

url:镜像路径


9.profiles



1. settings.xml中时意味着该profile是全局的,所以只能配置范围宽泛一点配置信息,比如远程仓库等。而一些比较细致一点的需要定义在项目的pom.xml中。

2.profile可以让我们定义一系列的配置信息,然后指定其激活条件。

根据每个profile对应不同的激活条件和配置信息,从而达到不同环境使用不同配置。

例子:通过profile定义jdk1.5以上使用一套配置,jdk1.5以下使用另外一套配置;或者通过操作系统来使用不同的配置信息。

3.settings.xml中的信息有repositoriespluginRepositoriesproperties。定义在properties的值可以在pom.xml中使用。

下面的例子是从官网翻译的,大家有疑问还可以去官网查看


Activation

 


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

jdk:检测到对应jdk版本就激活

os:针对不同操作系统

property:当maven检测到propertypom中如${name}这样的)profile将被激活

file:如果存在文件,激活,不存在文件激活

通过以下命令查看哪些profile将生效

mvn help:active-profiles


properites


Maven的属性是值占位符,就像Ant中的一样。如果X是一个属性的话,在POM中可以使用${X}来进行任意地方的访问。他们来自于五种不同的风格,所有都可以从settings.xml文件中访问到。

1.env.xenv.”前缀会返回当前的环境变量。如${env.PATH}就是使用了$path环境变量(windosws中的%PATH%)。

2.project.x:一个点.”分割的路径,在POM中就是相关的元素的值。例如:<project><version>1.0</version></project>就可以通过${project.version}来访问。

 

3.settings.x:一个点.”分割的路径,在settings.xml中就是相对应的元素的值,例如:<settings><offline>false</offline></settings>就可以通过${settings.offline}来访问。

4.Java系统属性:通过java.lang.System.getProperties()来访问的属性都可以像POM中的属性一样访问,例如:${java.home}

5.x:被<properties/>或者外部文件定义的属性,值可以这样访问${someVar}

  <profiles>

    <profile>

      ...

      <properties>

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

      </properties>

      ...

    </profile>

  </profiles>

上面这个profile如果被激活,那么在pom${user.install}就可以被访问了。


Repositories


Repositories是远程项目集合maven用来移植到本地仓库用于构建系统。如果来自本地仓库,Maven调用它的插件和依赖关系。不同的远程仓库可能包含不同的项目,当profile被激活,他们就会需找匹配的release或者snapshot构件。

<profiles>

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

      <pluginRepositories>

        ...

      </pluginRepositories>

      ...

    </profile>

  </profiles>

1.releasessnapshots:这是各种构件的策略,release或者snapshot。这两个集合,POM就可以根据独立仓库任意类型的依赖改变策略。如:一个人可能只激活下载snapshot用来开发。

2.enabletrue或者false,决定仓库是否对于各自的类型激活(release或者snapshot)

3.updatePolicy:这个元素决定更新频率。maven将比较本地pom的时间戳(存储在仓库的maven数据文件中)和远程的.有以下选择: always, daily (默认), interval:X (x是代表分钟的整型)never.

4.checksumPolicy:当Maven向仓库部署文件的时候,它也部署了相应的校验和文件。可选的为:ignorefailwarn,或者不正确的校验和。

5.layout:在上面描述仓库的时候,提到他们有统一的布局。Maven 2有它仓库默认布局。然而,Maven 1.x有不同布局。使用这个元素来表明它是default还是legacy


10. activeProfiles


<activeProfiles>

    <activeProfile>alwaysActiveProfile</activeProfile>

    <activeProfile>anotherAlwaysActiveProfile</activeProfile>

</activeProfiles>

每个activeProfile元素对应一个profile id的值,任何profile id被定义到activeProfileprofile将被激活。


参考文档:

http://blog.csdn.net/oDeviloo/article/details/52050277

http://blog.csdn.net/odeviloo/article/details/51999878


猜你喜欢

转载自blog.csdn.net/qq877507054/article/details/79138294