首页 > 其他分享 >maven中dependencyManagement与dependencies的区别与联系

maven中dependencyManagement与dependencies的区别与联系

时间:2022-11-06 15:12:41浏览次数:76  
标签:dependencyManagement easyexcel jar maven dependencies 子项目 声明

背景

新的需求中需要使用到easyexcel中的动态生成列的功能,但是因为我们项目一开始使用的是1.2.4-beta的低版本,并不支持此项特性,所以我们需要将easyexcel的版本升级到高版本,让手下去拉个将项目中的easyexcel的版本升级至2.2.6。

目前的这个项目中对应有10个子项目,一开始小伙改的时候,只是把对应的impl的版本给改了,这样就会导致项目在打包运行其他子项目时会出现classNotFound的错误,因为这些类还是向上找的老版本的easyexcel,所以打包报错。

小伙不了解maven中的dependencyManagement标签特性,就傻乎乎的将每个子项目中的dependencies中关于easyexcel的那一项显式地声明为高版本,这样的话非常的笨拙,而且不利于管理。

利用dependencyManagement标签特性我们只需要在父项目中声明dependencyManagement并制定easyexcel的版本号即可,子项目不需要再次声明了。

接下来重点记一下这两个标签的区别。

区别

1. dependencyManagement标签:只是声明项目对jar包的依赖关系并对所依赖jar包进行版本管理,并不实现引入。而dependencies标签则是将所依赖的jar直接加到项目中。

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

在pom.xml文件中对jar的版本的判断途径:

1)如果dependencies里的dependency自己没有声明version元素,那么maven就会到dependencyManagement里面去找有没有对该artifactId和groupId进行过版本声明,如果有,就继承它,如果没有就会报错,告诉你必须为dependency声明一个version。

2)如果dependencies中的dependency声明了version,那么无论dependencyManagement中有无对该jar的version声明,都以dependency里的version为准。

<!-- 会实际下载jar包,子项目会继承这些依赖  -->  
    <dependencies>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>easyexcel</artifactId>
        </dependency>
    </dependencies>
 
    <!-- //只是对版本进行管理,不会实际引入jar,子项目继承时必须显示声明  -->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>easyexcel</artifactId>
                <version>2.2.6</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

  

本篇文章如有帮助到您,请给「翎野君」点个赞,感谢您的支持。

首发链接:https://www.cnblogs.com/lingyejun/p/16862611.html

标签:dependencyManagement,easyexcel,jar,maven,dependencies,子项目,声明
From: https://www.cnblogs.com/lingyejun/p/16862611.html

相关文章

  • Maven
    1、作用管理项目中的jar包2、idea与maven兼容性问题IDEA2022兼容maven3.8.1及之前版本IDEA2021兼容maven3.8.1及之前版本IDEA2020兼容Maven3.6.3及之前版本IDE......
  • 执行Maven的test命令报错
    参考网址:https://blog.csdn.net/weixin_46688566/article/details/126470742解决方案在pom.xml文件中加入以下依赖:<plugin><groupId>org.eclipse.m2e</groupId>......
  • spring-boot-maven-plugin(通过maven插件打包jar到指定文件夹)
    <build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId>......
  • Maven下web项目配置Servlet与Mybatis及注意事项
    在之前的学习过程中,我一直在使用Maven项目(因为相对比较方便),但是在配置时出现了各种问题,在此总结一下。先放一下配置好的项目结构1.用Maven配置web项目1>首先确保......
  • Maven POM 参考
    什么是POM?POM(ProjectObjectModel)称为“项目对象模型”。它是Maven项目的XML表示形式,保存在名为pom.xml的文件中。概述这是pom.xml中的元素列表。注意,modelV......
  • Maven 如何配置推送的仓库
    在配置,有关Maven的推送仓库地址应该配置在项目的pom.xml文件中的。使用的配置属性为:distributionManagement如下面的配置:<distributionManagement><re......
  • Maven学习3
    一、Maven常见命令1.常见命令  2.命令参数(先熟悉一下)-D传入属性名称如:mvnpackage-Dmaven.test.skip=true表示将maven.test.skip的值设置为true,告诉maven......
  • Maven环境下构建多模块项目
    Maven环境下构建多模块项目一、创建父模块和3个子模块1.maven_parent  2.maven_dao(maven_parent下的子模块)  3.maven_service(maven_parent下的子模块) ......
  • Maven 聚合工程的创建
    简单场景举例聚合工程创建示例说明:创建MavenProject:表示创建maven项目,newProject方式创建创建MavenModule:表示创建maven项目,newModule方式创建创建Sp......
  • (maven)报错
    ......