zoukankan      html  css  js  c++  java
  • Maven中<dependencies>节点和<dependencyManagement>节点的区别

    dependencyManagement只是插件管理,并不是真正的插件依赖,所以里面包含的插件在没有子项目使用的时候,并不会真正下载

    1 .使用项目继承

     利用项目继承可以将结构信息,部署信息,共同的依赖信息放置在单一的位置。在每个工程的 pom 中:

     

    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 部分:

    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 中继承了依赖的定义。

     

    为了看清楚可以在一个子模块 pom 所在目录下,执行命令

    1. #mvn help:effective-pom 

    可以看到最终起效果的 pom ,这在找错时很有效。

     

    2 .管理依赖

     

    在 pom 中指明 dependency management 元素的方式 maven 结合项目继承来管理依赖。在多模块应用中,可能多个子项目会有共同的依赖。此时为了正确运行,必须让所有的子项目使用依赖项的同一版本。必须确保应用的各个项目的依赖项和版本一致,才能保证测试的和发布的是相同的成果。因此,应在顶层的 pom 中定义共同的依赖关系。

     

    在 Proficio 应用的顶层 pom 中的 dependency management 段如下:

    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项目时候的依赖管理控制的。

  • 相关阅读:
    leetcode 350. Intersection of Two Arrays II
    leetcode 278. First Bad Version
    leetcode 34. Find First and Last Position of Element in Sorted Array
    leetcode 54. Spiral Matrix
    leetcode 59. Spiral Matrix II
    leetcode 44. Wildcard Matching
    leetcode 10. Regular Expression Matching(正则表达式匹配)
    leetcode 174. Dungeon Game (地下城游戏)
    leetcode 36. Valid Sudoku
    Angular Elements
  • 原文地址:https://www.cnblogs.com/shengulong/p/6646072.html
Copyright © 2011-2022 走看看