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> 

  1. <dependency>  
  2.             <groupId>com.tiantian.mavenTest</groupId>  
  3.             <artifactId>projectB</artifactId>  
  4.             <version>1.0-SNAPSHOT</version>  
  5.             <exclusions>  
  6.                    <exclusion>  
  7.                           <groupId>com.tiantian.mavenTest</groupId>  
  8.                           <artifactId>projectC</artifactId>  
  9.                    </exclusion>  
  10.             </exclusions>  
  11.      </dependency>  
六、属性
pom.xml文件中我们可以使用${propertyName}的形式引用属性。这个propertyName有以下几种形式:

Ø  env.propertyName:引用环境变量,如引用当前系统环境变量PATH,使用${env.PATH}

Ø  project.propertyName:引用当前pom.xmlproject根元素下面的值。比如${project.version}

Ø  settings.propertyName:引用settings文件下的值,如${settings.localRepository}

Ø  java的系统属性,所有在java中使用java.lang.System.getProperties()能够获取到的属性都可以在pom.xml中引用,比如${java.home}

Ø  pom.xmlproperties元素下面的子元素作为属性。假如在pom.xml中有如下一段代码<properties><hello.world>helloWorld</hello.world></properties>,那么我们就可以使用${hello.world}引用到对应的helloWorld

 
http://haohaoxuexi.iteye.com/blog/2055745 


TAG:

 

评分:0

我来说两句

Open Toolbar