Maven中dependencyManagement标签使用

2024-06-02 23:38

本文主要是介绍Maven中dependencyManagement标签使用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一句话解释
项目中多个模块间公共依赖的版本号、scope的控制

业务场景
一个项目有很多模块,每个模块都会用到一些公共的依赖.这些公共的依赖若交由各个模块独自管理,若每个模块同一个依赖的版本号不一致,会造成很比问题。
打包和开发测试环境下对同一jar包不同版本号的处理可能不一致,造成运行时和测试时结果不一致项目升级时,会造成修改版本号时遍地开花的问题。

该标签通常适用于多模块环境下定义一个top module来专门管理公共依赖的情况下。
若dependencies里的dependency自己没有声明version元素,那么maven就会到depenManagement里去找有没有该artifactId和groupId进行过版本声明,若存在,则继承它,若没有则报错。你必须为dependency声明一个version,若dependencies中的dependency声明了version,则dependencyManagement中的声明无效。

1. 单一模块情况下 pom.xml

//只是对版本号进行管理,不会实际引入jar  
<dependencyManagement>  <dependencies>  <dependency>  <groupId>org.springframework</groupId> //jar 包身份限定  <artifactId>spring-core</artifactId>  <version>3.2.7</version>  //版本号的声明</dependency>  </dependencies>  
</dependencyManagement>  //会实际下载jar包  
<dependencies>  <dependency>  <groupId>org.springframework</groupId>  <artifactId>spring-core</artifactId> //不声明version 标签,则会继承</dependency>  
</dependencies>

2. 多模块情况:

parent-module 顶层模块,son1-module 和 son2-module 并列继承 parent-module
parent-module 中 pom.xml<properties>// 集中在properties 标签中定义所有 依赖的版本号<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><org.eclipse.persistence.jpa.version>1.2.6</org.eclipse.persistence.jpa.version><developer.organization>xxx</developer.organization><javaee-api.version>1.8</javaee-api.version>
</properties><dependencyManagement>  //定义公共依赖的版本号<dependencies> <dependency>  <groupId>org.eclipse.persistence</groupId>  <artifactId>org.eclipse.persistence.jpa</artifactId>  <version>${org.eclipse.persistence.jpa.version}</version>  <scope>provided</scope>  </dependency>  <dependency>  <groupId>javax</groupId>  <artifactId>javaee-api</artifactId>  <version>${javaee-api.version}</version>  </dependency>  </dependencies>  
</dependencyManagement>son-module1 中 的 pom.xml
<!--继承父类-->  
<parent>  <artifactId>parent-module</artifactId> //声明父类的身份信息<groupId>com.ppd</groupId>  <version>0.0.1-SNAPSHOT</version>  <relativePath>../parent-module/pom.xml</relativePath> //声明父类的pom 文件路径
</parent>  <modelVersion>4.0.0</modelVersion>  
<artifactId>son-module</artifactId>  
<packaging>ejb</packaging>  <!--依赖关系-->  
<dependencies>  <dependency>  <groupId>javax</groupId>  <artifactId>javaee-api</artifactId> //继承父类</dependency>  <dependency>  <groupId>com.fasterxml.jackson.core</groupId>  <artifactId>jackson-annotations</artifactId>  //继承父类</dependency>  <dependency>  <groupId>org.eclipse.persistence</groupId>  <artifactId>org.eclipse.persistence.jpa</artifactId>  //继承父类<scope>provided</scope>  </dependency>  
</dependencies>

与dependencies标签下dependency的区别:
所有声明在dependencies里的依赖都会自动引入,并默认被所有的子项目继承
dependencies即使在子项目中不写该依赖项,那么子项目仍然会从父项目中继承该依赖项(全部继承)
dependencyManagement只是声明依赖的版本号,该依赖不会引入,因此子项目需要显示声明所需要引入的依赖,若不声明则不引入子项目声明了依赖且未声明版本号和scope,则会继承父项目的版本号和scope,否则覆盖。

这篇关于Maven中dependencyManagement标签使用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1025416

相关文章

使用Python实现可恢复式多线程下载器

《使用Python实现可恢复式多线程下载器》在数字时代,大文件下载已成为日常操作,本文将手把手教你用Python打造专业级下载器,实现断点续传,多线程加速,速度限制等功能,感兴趣的小伙伴可以了解下... 目录一、智能续传:从崩溃边缘抢救进度二、多线程加速:榨干网络带宽三、速度控制:做网络的好邻居四、终端交互

Python中注释使用方法举例详解

《Python中注释使用方法举例详解》在Python编程语言中注释是必不可少的一部分,它有助于提高代码的可读性和维护性,:本文主要介绍Python中注释使用方法的相关资料,需要的朋友可以参考下... 目录一、前言二、什么是注释?示例:三、单行注释语法:以 China编程# 开头,后面的内容为注释内容示例:示例:四

Go语言数据库编程GORM 的基本使用详解

《Go语言数据库编程GORM的基本使用详解》GORM是Go语言流行的ORM框架,封装database/sql,支持自动迁移、关联、事务等,提供CRUD、条件查询、钩子函数、日志等功能,简化数据库操作... 目录一、安装与初始化1. 安装 GORM 及数据库驱动2. 建立数据库连接二、定义模型结构体三、自动迁

ModelMapper基本使用和常见场景示例详解

《ModelMapper基本使用和常见场景示例详解》ModelMapper是Java对象映射库,支持自动映射、自定义规则、集合转换及高级配置(如匹配策略、转换器),可集成SpringBoot,减少样板... 目录1. 添加依赖2. 基本用法示例:简单对象映射3. 自定义映射规则4. 集合映射5. 高级配置匹

Spring 框架之Springfox使用详解

《Spring框架之Springfox使用详解》Springfox是Spring框架的API文档工具,集成Swagger规范,自动生成文档并支持多语言/版本,模块化设计便于扩展,但存在版本兼容性、性... 目录核心功能工作原理模块化设计使用示例注意事项优缺点优点缺点总结适用场景建议总结Springfox 是

嵌入式数据库SQLite 3配置使用讲解

《嵌入式数据库SQLite3配置使用讲解》本文强调嵌入式项目中SQLite3数据库的重要性,因其零配置、轻量级、跨平台及事务处理特性,可保障数据溯源与责任明确,详细讲解安装配置、基础语法及SQLit... 目录0、惨痛教训1、SQLite3环境配置(1)、下载安装SQLite库(2)、解压下载的文件(3)、

使用Python绘制3D堆叠条形图全解析

《使用Python绘制3D堆叠条形图全解析》在数据可视化的工具箱里,3D图表总能带来眼前一亮的效果,本文就来和大家聊聊如何使用Python实现绘制3D堆叠条形图,感兴趣的小伙伴可以了解下... 目录为什么选择 3D 堆叠条形图代码实现:从数据到 3D 世界的搭建核心代码逐行解析细节优化应用场景:3D 堆叠图

Springboot如何正确使用AOP问题

《Springboot如何正确使用AOP问题》:本文主要介绍Springboot如何正确使用AOP问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录​一、AOP概念二、切点表达式​execution表达式案例三、AOP通知四、springboot中使用AOP导出

Navicat数据表的数据添加,删除及使用sql完成数据的添加过程

《Navicat数据表的数据添加,删除及使用sql完成数据的添加过程》:本文主要介绍Navicat数据表的数据添加,删除及使用sql完成数据的添加过程,具有很好的参考价值,希望对大家有所帮助,如有... 目录Navicat数据表数据添加,删除及使用sql完成数据添加选中操作的表则出现如下界面,查看左下角从左

IDEA Maven提示:未解析的依赖项的问题及解决

《IDEAMaven提示:未解析的依赖项的问题及解决》:本文主要介绍IDEAMaven提示:未解析的依赖项的问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝... 目录IDEA Maven提示:未解析的依编程赖项例如总结IDEA Maven提示:未解析的依赖项例如