zoukankan      html  css  js  c++  java
  • 记一次 dependencyManagement 问题解决

    使用场景

    定义在parent项目中,管理children中引入的依赖版本信息

    定义来说比叫简单,既然在父项目中定义了

    创建maven项目,项目结构

    wangshuyu-center
    - wangshuyu-center-api
    - wangshuyu-center-server
    - wangshuyu-center-dao
    

    wangshuyu-center pom.xml中引入了 dependencyManagement

    <!-- wangshuyu-center pom.xml -->
    
    <dependencyManagement >
      <dependencies>
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-jdbc</artifactId>
          <version>4.3.7.RELEASE</version>
        </dependency>
      </dependencies>
    </dependencyManagement>
    
    

    wangshuyu-center-server 引入 wangshuyu-center pom.xml

    <!-- wangshuyu-center-server pom.xml -->
    
    <parent>
      <artifactId>wangshuyu-center</artifactId>
      <groupId>com.wangshuyu.center</groupId>
      <version>1.0-SNAPSHOT</version>
    </parent>
    
    

    此时在 External Libraries中是没有 spring-jdbc的 jar

    如果module中需要使用 dependencyManagement 中的依赖,需要在自己的 pom.xml 中引入

    <!-- wangshuyu-center-server pom.xml -->
    
    <parent>
      <artifactId>wangshuyu-center</artifactId>
      <groupId>com.wangshuyu.center</groupId>
      <version>1.0-SNAPSHOT</version>
    </parent>
    
    <dependencies>
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jdbc</artifactId>
        <!-- 这里不需要再定义version,会使用management中的 -->
        <!-- 如果定义了version则优先使用自定义的,最短路径原则 -->
      </dependency>
    
    </dependencies>
    
    

    比较有意思的是,如果我在wangshuyu-center-server中引入新的version

    当满足下面两个条件时,会标红

    1. version在本地仓库中是不存在的;

    2. 子pom中没有引入该依赖;

    结论:dependencyManagement中的定义的依赖不会自动去从远程仓库下载,只有当module引入该依赖时才会去从远程仓库下载。

    其实也很好理解,dependencyManagement是规范版本信息,所定义的依赖module中并不一定会使用,只有当module使用时才需要导入。

    更进一步

    dependencyManagement中的依赖来源:从module中提取

    当在开发module时,需要对新引入的dependency做版本管理时,使用dependencyManagement,将module中的version放在父项目中管理。

  • 相关阅读:
    Jackrabbit 中Session最佳实践
    Android 学习历程
    SmartFoxServer 学习笔记 002
    互联网的下一代
    VirtualBox 中 安装 Ubuntu Desktop 10 桌面分辨率的调整
    学习 SmartFoxServer 笔记 001
    手工转换中缀式与前、后缀式
    汉字传值奇数乱码问题解决策略
    git权限管理工具gitolite使用笔记(一)
    git 安装笔记
  • 原文地址:https://www.cnblogs.com/wangshuyu/p/15567908.html
Copyright © 2011-2022 走看看