pom.xml
上一篇 / 下一篇 2015-06-16 18:24:06 / 个人分类:接口测试
一、定义project的外部依赖包
4个必填元素:groupId、artifactId、version和scope。
scope的取值范围:取值有compile、test、provided、runtime和system。
二、pom.xml的继承、聚合与依赖
要继承pom就需要有一个父pom,在Maven中定义了超级pom.xml,任何没有申明自己父pom.xml的pom.xml都将默认继承自这个超级pom.xml。
子pom.xml会完全继承父pom.xml中所有的元素,而且对于相同的元素,一般子pom.xml中的会覆盖父pom.xml中的元素,但是有几个特殊的元素它们会进行合并而不是覆盖。这些特殊的元素是:
Ø dependencies
Ø developers
Ø contributors
Ø plugin列表,包括plugin下面的reports
Ø resources
三、继承
1. 被继承项目与继承项目是父子目录关系。即projectChild在projectRoot工程目录下。
子pom.xml中需要明确指定父pom.xml的GAV。
<parent>
<groupId>com.tiantian.mavenTest(projectRoot的原型ID)</groupId>
<artifactId>projectRoot</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
2. 被继承项目与继承项目的目录结构不是父子关系。projectA和projectB两个工程是平级目录时。
<parent>
<groupId>com.tiantian.mavenTest</groupId>
<artifactId>projectA</artifactId>
<version>1.0-SNAPSHOT</version>
<relativePath>../projectA/pom.xml</relativePath>
</parent>
四、聚合
一个主项目(被聚合项目)中,聚合了多个子模块。操作步骤:
Ø 修改被聚合项目的pom.xml中的packaging元素的值为pom
Ø 在被聚合项目的pom.xml中的modules元素下指定它的子模块项目
1. 被聚合项目和子模块是父子关系时。
如:------projectA
------pom.xml
------projectB
------pom.xml
<packaging>pom</packaging>
<modules>
<module>projectB</module>
</modules>
2. 不是父子关系。假设平级。
<modules>
<module>projectB</module>
</modules>
3. 有多个子模块时:子模块项目的artifactId来作为module的值
父子关系时,module值是子模块projectB对应的目录名projectB,而不是子模块对应的artifactId。(是这样吗??有什么区别呢???)
非父子关系时,这里的projectB对应的是projectB这个项目的目录名称,而不是它的artifactId
五、依赖
项目之间的依赖是通过pom.xml文件里面的dependencies元素下面的dependency元素进行的。dependency中主要通过依赖项目的groupId、artifactId和version来定义。
Ø type:对应于依赖项目的packaging类型,默认是jar
Ø scope:表示依赖项目的一个作用范围。scope的主要取值范围如下(还有一个是在Maven2.0.9以后版本才支持的import,关于import作用域将在后文《Dependency介绍》中做介绍):
n compile:所有的情况都是有用的,包括编译和运行时。而且这种类型的依赖性是可以传递的。
n provided:这个跟compile很类似,但是它表示你期望这个依赖项目在运行时由JDK或者容器来提供。这种类型表示该依赖只有在测试和编译的情况下才有效,在运行时将由JDK或者容器提供。这种类型的依赖性是不可传递的。
n runtime:表示该依赖只有在运行的时候才是必须的。
n test:表示只有测试的时候才需要。
n system:这种类型跟provided类似,唯一不同的就是这种类型的依赖我们要自己提供jar包,这需要与另一个元素systemPath(绝对路径)来结合使用。
Ø systemPath:
Ø optional:A依赖B,B设置了optional,表示A运行时不一定会用到B。
Ø exclusions:如projectA依赖于projectB,然后projectB又依赖于projectC,但是在projectA里面我们不需要projectB依赖的projectC,使用exclusions排除projectC。
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
<optional>true</optional>
</dependency>
</dependencies>
- <dependency>
- <groupId>com.tiantian.mavenTest</groupId>
- <artifactId>projectB</artifactId>
- <version>1.0-SNAPSHOT</version>
- <exclusions>
- <exclusion>
- <groupId>com.tiantian.mavenTest</groupId>
- <artifactId>projectC</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
六、属性
在pom.xml文件中我们可以使用${propertyName}的形式引用属性。这个propertyName有以下几种形式:
Ø env.propertyName:引用环境变量,如引用当前系统环境变量PATH,使用${env.PATH}。
Ø project.propertyName:引用当前pom.xml中project根元素下面的值。比如${project.version}。
Ø settings.propertyName:引用settings文件下的值,如${settings.localRepository}
Ø java的系统属性,所有在java中使用java.lang.System.getProperties()能够获取到的属性都可以在pom.xml中引用,比如${java.home}。
Ø pom.xml中properties元素下面的子元素作为属性。假如在pom.xml中有如下一段代码<properties><hello.world>helloWorld</hello.world></properties>,那么我们就可以使用${hello.world}引用到对应的helloWorld。
http://haohaoxuexi.iteye.com/blog/2055745
TAG: