Maven pom 依赖关系及属性变量

依赖Dependency

     项目之间的依赖是经过pom.xml文件里面的dependencies元素下面的dependency元素进行的。一个dependency元素定义一个依赖关系。在dependency元素中咱们主要经过依赖项目的groupId、artifactId和version来定义所依赖的项目。java

       先来看一个简单的项目依赖的示例吧,假设我如今有一个项目projectA,而后它里面有对junit的依赖,那么它的pom.xml就相似如下这个样子:apache

<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>com.tiantian.mavenTest</groupId>  
  <artifactId>projectB</artifactId>  
  <version>1.0-SNAPSHOT</version>  
  <packaging>jar</packaging>  
   
  <dependencies>  
    <dependency>  
      <groupId>junit</groupId>  
      <artifactId>junit</artifactId>  
      <version>3.8.1</version>  
      <scope>test</scope>  
              <optional>true</optional>  
    </dependency>  
  </dependencies>  
</project>

       在dependency元素中除了能够指定依赖项目的groupId、artifactId和version以外,还能够指定如下元素:maven

1)  type:对应于依赖项目的packaging类型,默认是jaride

2)  scope:表示依赖项目的一个做用范围。scope的主要取值范围以下(还有一个是在Maven2.0.9之后版本才支持的import,关于import做用域将在后文《Dependency介绍》中作介绍):测试

       a.  compile:这是它的默认值,这种类型很容易让人产生误解,觉得只有在编译的时候才是须要的,其实这种类型表示全部的状况都是有用的,包括编译和运行时。并且这种类型的依赖性是能够传递的。spa

       b.  provided:这个跟compile很相似,可是它表示你指望这个依赖项目在运行时由JDK或者容器来提供。这种类型表示该依赖只有在测试和编译的状况下才有效,在运行时将由JDK或者容器提供。这种类型的依赖性是不可传递的。code

       c.  runtime:这种类型表示该依赖在编译的时候不是必须的,只有在运行的时候才是必须的。xml

       d.  test:这表示这种依赖只有测试的时候才须要,正常状况下是不须要的。ci

       e.  system:这种类型跟provided相似,惟一不一样的就是这种类型的依赖咱们要本身提供jar包,这须要与另外一个元素systemPath来结合使用。systemPath将指向咱们系统上的jar包的路径,并且必须是给定的绝对路径。作用域

3)  systemPath:上面已经说过了这个元素是在scope的值为system的时候用于指定依赖的jar包在系统上的位置的,并且是绝对路径。该元素必须在依赖的 jar包的scope为system时才能使用,不然Maven将报错。

4)  optional:当该项目自己做为其余项目的一个依赖时标记该依赖为可选项。假设如今projectA有一个依赖性projectB,咱们把projectB这个依赖项设为optional,这表示projectB在projectA的运行时不必定会用到。这个时候若是咱们有另外一个项目projectC,它依赖于projectA,那么这个时候由于projectB对于projectA是可选的,因此Maven在创建projectC的时候就不会安装projectB,这个时候若是projectC确实须要使用到projectB,那么它就能够定义本身对projectB的依赖。当一个依赖是可选的时候,咱们把optional元素的值设为true,不然就不设置optional元素。

5)  exclusions:考虑这样一种状况,咱们的projectA依赖于projectB,而后projectB又依赖于projectC,可是在projectA里面咱们不须要projectB依赖的projectC,那么这个时候咱们就能够在依赖projectB的时候使用exclusions元素下面的exclusion排除projectC。这个时候咱们能够这样定义projectA对projectB的依赖:

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

 

属性变量

在pom.xml文件中咱们可使用${propertyName}的形式引用属性。这个propertyName有如下几种形式:

1)  env.propertyName:这种形式表示引用的是环境变量,好比咱们须要引用当前系统的环境变量PATH的时候,就可使用${env.PATH}。

2) project.propertyName:这种形式表示引用的是当前这个pom.xml中project根元素下面的子元素的值。好比咱们须要引用当前project下面的version的时候,就可使用${project.version}。

3)  settings.propertyName:这种形式引用的是Maven本地配置文件settings.xml或本地Maven安装目录下的settings.xml文件根元素settings下的元素。好比咱们须要引用settings下的本地仓库localRepository元素的值时,咱们能够用${settings.localRepository}

4)  java的系统属性,全部在java中使用java.lang.System.getProperties()可以获取到的属性均可以在pom.xml中引用,好比${java.home}。

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

相关文章
相关标签/搜索