Maven中 節點和 節點的區別

 1 .使用項目繼承sql

 利用項目繼承能夠將結構信息,部署信息,共同的依賴信息放置在單一的位置。在每一個工程的 pom 中:apache

 

  
  
           
  
  
  1. <parent> 
  2.  
  3. <groupId>org.apache.maven.proficio</groupId> 
  4.  
  5. <artifactId>proficio</artifactId> 
  6.  
  7. <version>1.0-SNAPSHOT</version> 
  8.  
  9. </parent> 

這使得項目的 pom 能夠繼承頂層 pom 中的定義,檢查頂層 pom 的 dependencies 部分:api

  
  
           
  
  
  1. <project> 
  2.  
  3. <dependencies > 
  4.  
  5. <dependency > 
  6.  
  7. <groupId>junit</groupId> 
  8.  
  9. <artifactId>junit</artifactId> 
  10.  
  11. <version>4.7</version> 
  12.  
  13. <scope>test</scope> 
  14.  
  15. </dependency > 
  16.  
  17. </dependencies > 
  18.  
  19. </project> 

在各個子模塊的 pom 中沒有對 Junit 依賴的定義,可是從頂層 pom 中繼承了依賴的定義。maven

 

爲了看清楚能夠在一個子模塊 pom 所在目錄下,執行命令ide

  
  
           
  
  
  1. #mvn help:effective-pom 

能夠看到最終起效果的 pom ,這在找錯時頗有效。測試

 

2 .管理依賴spa

 

在 pom 中指明 dependency management 元素的方式 maven 結合項目繼承來管理依賴。在多模塊應用中,可能多個子項目會有共同的依賴。此時爲了正確運行,必須讓全部的子項目使用依賴項的同一版本。必須確保應用的各個項目的依賴項和版本一致,才能保證測試的和發佈的是相同的成果。所以,應在頂層的 pom 中定義共同的依賴關係。code

 

在 Proficio 應用的頂層 pom 中的 dependency management 段以下:xml

  
  
           
  
  
  1. <dependencyManagement> 
  2.  
  3.     <dependencies > 
  4.  
  5.       <dependency > 
  6.  
  7.         <groupId>com.devzuz.mvnbook.proficio</groupId> 
  8.  
  9.         <artifactId>proficio-model</artifactId> 
  10.  
  11.         <c>${project.version}</version> 
  12.  
  13.       </dependency > 
  14.  
  15.       <dependency > 
  16.  
  17.         <groupId>com.devzuz.mvnbook.proficio</groupId> 
  18.  
  19.         <artifactId>proficio-api</artifactId> 
  20.  
  21.         <version>${project.version}</version> 
  22.  
  23.       </dependency > 
  24.  
  25.       <dependency > 
  26.  
  27.         <groupId>com.devzuz.mvnbook.proficio</groupId> 
  28.  
  29.         <artifactId>proficio-core</artifactId> 
  30.  
  31.          <version>${project.version}</version> 
  32.  
  33.       </dependency > 
  34.  
  35.       <dependency > 
  36.  
  37.         <groupId>com.devzuz.mvnbook.proficio</groupId> 
  38.  
  39.         <artifactId>proficio-store-memory</artifactId> 
  40.  
  41.         <version>${project.version}</version> 
  42.  
  43.       </dependency > 
  44.  
  45.       <dependency > 
  46.  
  47.         <groupId>com.devzuz.mvnbook.proficio</groupId> 
  48.  
  49.         <artifactId>proficio-store-xstream</artifactId> 
  50.  
  51.         <version>${project.version}</version> 
  52.  
  53.       </dependency > 
  54.  
  55.       <dependency > 
  56.  
  57.         <groupId>org.codehaus.plexus</groupId> 
  58.  
  59.         <artifactId>plexus-container-default</artifactId> 
  60.  
  61.         <version>1.0-alpha-9</version> 
  62.  
  63.       </dependency > 
  64.  
  65.     </dependencies > 
  66.  
  67.   </dependencyManagement> 

注意 ${project.version} 變量指的是應用的 version 。繼承

 

頂層 pom 中的 dependencies 與 dependencyManagement 中的 dependencies 元素有一個重要的區別:

 

dependencyManagement 中的 dependencies 元素只代表依賴項版本的優先選擇,並不影響項目的依賴項;而 dependencies 元素則影響項目的依賴項。

 

檢查 Proficio api 模塊的 pom:

  
  
           
  
  
  1. <project> 
  2.  
  3.   <parent> 
  4.  
  5.     <groupId>com.devzuz.mvnbook.proficio</groupId> 
  6.  
  7.     <artifactId>proficio</artifactId> 
  8.  
  9.     <version>1.0-SNAPSHOT</version> 
  10.  
  11.   </parent> 
  12.  
  13.   <modelVersion>4.0.0</modelVersion> 
  14.  
  15.   <artifactId>proficio-api</artifactId> 
  16.  
  17.   <packaging>jar</packaging> 
  18.  
  19.   <name>Proficio API</name> 
  20.  
  21.   <dependencies > 
  22.  
  23.     <dependency > 
  24.  
  25.       <groupId>com.devzuz.mvnbook.proficio</groupId> 
  26.  
  27.        <artifactId>proficio-model</artifactId> 
  28.  
  29.     </dependency > 
  30.  
  31.   </dependencies > 
  32.  
  33. </project> 

 其中沒有指明依賴項的版本信息,在頂層 pom 中的 dependencyManagement 中代表其優選的版本是 ${project.version} 即 1.0-SNAPSHOT 。爲使其模塊 pom 完整,其版本信息會注入其中。

 

只有當 外層的dependencies 元素中沒有指明版本信息時, dependencyManagement 中的 dependencies 元素才起做用。

 

注意:一個是項目依賴,一個是多模塊maven項目時候的依賴管理控制的。

相關文章
相關標籤/搜索