首页 > 其他分享 >[转]Maven dependencyManagement与dependencies区别

[转]Maven dependencyManagement与dependencies区别

时间:2023-06-12 14:12:16浏览次数:32  
标签:dependencyManagement 依赖 pom 模块 版本号 Maven dependencies 子项目

一、dependencyManagement应用场景

为了项目的正确运行,必须让所有的子模块使用依赖项的统一版本,必须确保应用的各个项目的依赖项和版本一致,才能保证测试的和发布的是相同的结果。在我们项目顶层的pom文件中,我们会看到dependencyManagement元素。通过它元素来管理jar包的版本,让子项目中引用一个依赖而不用显示的列出版本号。Maven会沿着父子层次向上走,直到找到一个拥有dependencyManagement元素的项目,然后它就会使用在这个dependencyManagement元素中指定的版本号。

父pom中dependencyManagement如下:

   <modules>
        <module>module1</module>
    </modules>
    <properties>
            <spring-version>3.1.1.RELEASE</spring-version>
    </properties>

    <dependencyManagement>
          <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-web</artifactId>
                <version>${spring-version}</version>
          </dependency>
    </dependencyManagement>

子模块module1中dependency声明如下所示:

   <dependencies>
            <dependency>
                  <groupId>org.springframework</groupId>
                  <artifactId>spring-web</artifactId>
            </dependency>
    </dependencies>

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

二、dependencies应用场景

相对于dependencyManagement,如果在父pom文件中中通过dependencies引入jar,将默认被所有的子模块继承。
子模块如果希望有自己个性化的内容,可以在子模块中对于其中的某个属性进重新定义。
例如:
父pom中:

    <dependencyManagement>
       <dependencies>
          ....
          <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-web</artifactId>
                <version>3.1</version>
          </dependency>
          ....
      </dependencies>
    </dependencyManagement>

子模块1的pod中:

<dependencies>
          ....
          <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-web</artifactId>
                <version>3.2</version>
              <exclusions>
                  <exclusion>
                        <groupId>com.alibaba</groupId>
                        <artifactId>fastjson</artifactId>
                    </exclusion>
              </exclusions>
          </dependency>
          ....
      </dependencies>

那么,子模块1由于重新定义了spring-web的描述,因此子模块将采用自己的依赖定义,而不再使用pom中默认定义的。

三、dependencyManagement与dependencies区别

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

dependencies即使在子模块中不写该依赖项,那么子模块仍然会从父项目中继承该依赖项(全部继承)。

在实际的项目开发中,推荐在父pom中使用dependencyManagement对项目中使用到的依赖包进行统一的管理。



作者:GeekerLou
链接:https://www.jianshu.com/p/c8666474cf9a
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

标签:dependencyManagement,依赖,pom,模块,版本号,Maven,dependencies,子项目
From: https://www.cnblogs.com/dirgo/p/17474877.html

相关文章

  • Java开发——Maven
    MVC模式MVC模式是软件工程中常见的一种软件架构模式,该模式把项目分为三个基本部分:模型Model、视图View和控制器Controller。视图:界面的显示,以及与用户的交互功能控制器:用来决定对于视图发来的请求需要那一个模型来处理,以及处理后需要跳回到哪一个视图,用来连接视图和模型模型:持......
  • Maven常用命令及其作用
    一、Maven常用命令及其作用1、mavenclean:对项目进行清理,删除target目录下编译的内容2、mavencompile:编译项目源代码3、maventest:对项目进行运行测试4、mavenpacket:打包文件并存放到项目的target目录下,打包好的文件通常都是编译后的class文件5、maveninstall:在本地......
  • axis2 maven报错Could not find artifact org.apache.axis2:axis2:jar:1.7.9
    Couldnotfindartifactorg.apache.axis2:axis2:jar:1.8.2inaliyunmaven(https://maven.aliyun.com/repository/public/)一开始以为是镜像的问题,但是换成中央仓库也没用https://repo.maven.apache.org/maven2/org/apache/axis2/axis2/1.7.9/实际上,这个目录里确实没有j......
  • GitlabCI学习笔记之五:GitLabRunner pipeline语法之artifacts dependencies
    artifacts用于指定在作业成功或者失败时应附加到作业的文件或目录的列表。作业完成后,工件将被发送到GitLab,并可在GitLabUI中下载。artifacts:paths路径是相对于项目目录的,不能直接链接到项目目录之外。将制品设置为target目录artifacts:paths:-target/禁用工件......
  • Maven知识点
    一、常用标签及属性1.maven 依赖属性:groupId、artifactId、versiongroupId、artifactId、version,当使用该插件时会从本地仓库中搜索,如果没有即从远程仓库下载2.插件执行: execution,id,phase,goals,configurationexecution配置包含一组指示插件如何执......
  • maven自动部署到远程tomcat教程
     maven自动部署到远程tomcat教程使用maven的自动部署功能可以很方便的将maven工程自动部署到远程tomcat服务器,节省了大量时间。本文章适用于tomcat的7.x,8.x,9.x版本。下面是自动部的步骤1,首先,配置tomcat的manager编辑远程tomcat服务器下的conf/tomcat-users.xml,在末尾增加(其......
  • 01-Maven基础-简介安装、基本使用(命令)、IDEA配置、(写jar,刷新自动下载)、依赖管理
    文章目录0、Maven1、Maven简介2、Maven安装配置安装配置步骤3、Maven基本使用Maven常用命令Maven生命周期IDEA配置MavenMaven坐标详解IDEA创建Maven项目IDEA导入Maven项目配置Maven-Helper插件(非常实用的小插件)依赖管理使用坐标导入jar包依赖范围0、Maven1......
  • maven 打包时将 jar 也导入jar项目
    在pom.xml中添加代码<build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-dependency-plugin</artifactId><version>2.8</version>......
  • idea 里面调出 maven 侧边栏
    (1)按Shift键两次,输入maven(2)选择“AddMavenProjects”(3)侧边出现Maven选项 ......
  • maven学习
    1.maven简介1.1软件是一个工程完成一个java项目,需要做哪些工作?分析项目要做什么,知道项目有哪些组成部分。设计项目,通过哪些步骤,使用哪些技术。需要多少人,多长的时间。组建团队,招人,购置设备,服务器,软件,笔记本。开发人员写代码。开发人员需要测试自己写代码。重复多次......