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

  • 相关阅读:
    电子电路基础复习 —— 电阻
    Linux 网络编程(IO模型)
    Linux 2.6 源码学习-内存管理-buddy算法
    【转】MySQL性能优化的21个最佳实践
    linux 2.6 驱动笔记(三)
    linux 2.6 驱动笔记(二)
    公共代码参考(httpclient)
    linux 2.6 驱动笔记(一)
    bzoj 2401: 陶陶的难题I 数论
    bzoj 3144: [Hnoi2013]切糕 最小割
  • 原文地址:https://www.cnblogs.com/shengulong/p/6646072.html
Copyright © 2011-2022 走看看