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。

相關文章
相關標籤/搜索