百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术分类 > 正文

Dependencies与DependencyManagement的区别

ztj100 2025-02-20 18:56 20 浏览 0 评论


现在Maven项目管理,在开发中时比较常用的,在一些项目汇总遇到依赖冲突的问题之后,还是没有能有一个很好的解决办法,这次就来看看在使用Maven管理依赖的过程中dependencies与dependencyManagement的区别,

DepencyManagement应用场景

当我们的项目模块很多的时候,使用Maven管理项目是非常方便的,它可以我们管理、构建、文档、报告、依赖、SCMS、发布、分发等等一系列的东西。可以方便编译代码、进行依赖管理、管理二进制库等等操作。

由于在项目中使用的模块较多,所以又可以抽象一层,抽出一个itoo-base-parent来管理子项目的公共依赖。为了项目能够正确地运行,必须让所有子项目使用依赖项的统一版本,必须确保应用的各个项目的依赖项和版本一致,才能保证测试和发布是相同的结果。

在项目的顶层的POM文件中,会看到一个dependencyManagement元素。通过它来管理jar的版本,让子项目中引用一个依赖而不用显示的列出版本号。Maven会沿着父层次向上走,直到找到拥有dependencyManagement元素的项目,然后她就会使用在这个dependencyManagement元素中指定的版本号。


  
          
              
                javax  
                javaee-api  
                ${javaee-api.version}  
              
          
      


  
  
        itoo-base-parent  
        com.tgb  
  
        0.0.1-SNAPSHOT  
        ../itoo-base-parent/pom.xml  
      
        4.0.0  
        itoo-base  
        ejb  
          
          
          
          
            javax  
            javaee-api  
          
          
          
            com.fasterxml.jackson.core  
            jackson-annotations  
          
          
          
            org.eclipse.persistence  
            org.eclipse.persistence.jpa  
            provided  
          
      
 

上面为了演示,拷贝的是网上资源,感谢资源主。

这样做的好处是:统一管理项目的版本号,确保应用的各个项目的依赖和版本一致,才能保证测试和发布是相同的成果。所以,在顶层pom中定义共同的依赖关系。同时可以避免在每个使用的子项目中都声明一个版本号,这样想升级或者想切换到另一个版本的时候只需要在父类容器中进行更新,而不需要任何一个子项目的修改;如果某个子项目需要另一个版本号的时候,只需要在dependencies中声明对应的版本号就可以了,子类就会使用子类声明的版本号,而不继承父类版本号。

Dependencies

dependencyManagement,所有生命在dependencies里的依赖都会自动引入,并默认被所有的子项目继承。

区别

dependencies 就是在子项目中不引入该依赖项,那么子项目中仍然会从父项目中继承该项目,这个继承属于是全部继承。

dependencyManagement 里只声明依赖,并不现实引入,因此子项目需要显示声明需要用的依赖。如果不在子项目中声明依赖,是不会从父项目中继承下来;只有在子项目中写入了该依赖项,并且没有指定具体的版本,才会从父项目再继承该依赖项,并且version和scope都是从父POM文件中进行读取。另外如果子项目中指定了版本号,那么会使用子项目中指定的版本号。


Maven 约定优于配置

Maven提出这样的约束主要是为项目提供合理的默认行为,不需要一些不必要的配置,提供了默认的目录

  • src 源代码和测试代码的根目录
  • main应用代码的目录
  • java 源代码的目录
  • resource 项目资源文件
  • test 测试代码源目录
  • target 编译后的各种文件、jar文件等的路径。

对于Maven的约定优于配置的理解,一方面对小型项目基本满足不需要自己配置东西,使用Maven已经配置好的东西,快速开发。另一方面,对于不满足的项目还需要一些自定义的内容,体现了灵活性。配置大量减少,随着项目的越复杂这种优势越明显。

总结区别

中jar直接加入到项目中,管理的是依赖关系(如果有父级pom,子级pom,则子级pom中只能被动接受父级的版本);

主要管理版本,对于子类继承同一个父类是很有用的,集中管理依赖版本不添加依赖关系,对于其中定义的版本,子pom中不一定继承父级pom中的所有版本。

相关推荐

告别手动操作:一键多工作表合并的实用方法

通常情况下,我们需要将同一工作簿内不同工作表中的数据进行合并处理。如何快速有效地完成这些数据的整合呢?这主要取决于需要合并的源数据的结构。...

【MySQL技术专题】「优化技术系列」常用SQL的优化方案和技术思路

概述前面我们介绍了MySQL中怎么样通过索引来优化查询。日常开发中,除了使用查询外,我们还会使用一些其他的常用SQL,比如INSERT、GROUPBY等。对于这些SQL语句,我们该怎么样进行优化呢...

9.7寸视网膜屏原道M9i双系统安装教程

泡泡网平板电脑频道4月17日原道M9i采用Win8安卓双系统,对于喜欢折腾的朋友来说,刷机成了一件难事,那么原道M9i如何刷机呢?下面通过详细地图文,介绍原道M9i的刷机操作过程,在刷机的过程中,要...

如何做好分布式任务调度——Scheduler 的一些探索

作者:张宇轩,章逸,曾丹初识Scheduler找准定位:分布式任务调度平台...

mysqldump备份操作大全及相关参数详解

mysqldump简介mysqldump是用于转储MySQL数据库的实用程序,通常我们用来迁移和备份数据库;它自带的功能参数非常多,文中列举出几乎所有常用的导出操作方法,在文章末尾将所有的参数详细说明...

大厂面试冲刺,Java“实战”问题三连,你碰到了哪个?

推荐学习...

亿级分库分表,如何丝滑扩容、如何双写灰度

以下是基于亿级分库分表丝滑扩容与双写灰度设计方案,结合架构图与核心流程说明:一、总体设计目标...

MYSQL表设计规范(mysql表设计原则)

日常工作总结,不是通用规范一、表设计库名、表名、字段名必须使用小写字母,“_”分割。...

怎么解决MySQL中的Duplicate entry错误?

在使用MySQL数据库时,我们经常会遇到Duplicateentry错误,这是由于插入或更新数据时出现了重复的唯一键值。这种错误可能会导致数据的不一致性和完整性问题。为了解决这个问题,我们可以采取以...

高并发下如何防重?(高并发如何防止重复)

前言最近测试给我提了一个bug,说我之前提供的一个批量复制商品的接口,产生了重复的商品数据。...

性能压测数据告诉你MySQL和MariaDB该怎么选

1.压测环境为了尽可能的客观公正,本次选择同一物理机上的两台虚拟机,一台用作数据库服务器,一台用作运行压测工具mysqlslap,操作系统均为UbuntuServer22.04LTS。...

屠龙之技 --sql注入 不值得浪费超过十天 实战中sqlmap--lv 3通杀全国

MySQL小结发表于2020-09-21分类于知识整理阅读次数:本文字数:67k阅读时长≈1:01...

破防了,谁懂啊家人们:记一次 mysql 问题排查

作者:温粥一、前言谁懂啊家人们,作为一名java开发,原来以为mysql这东西,写写CRUD,不是有手就行吗;你说DDL啊,不就是设计个表结构,搞几个索引吗。...

SpringBoot系列Mybatis之批量插入的几种姿势

...

MySQL 之 Performance Schema(mysql安装及配置超详细教程)

MySQL之PerformanceSchema介绍PerformanceSchema提供了在数据库运行时实时检查MySQL服务器的内部执行情况的方法,通过监视MySQL服务器的事件来实现监视内...

取消回复欢迎 发表评论: