Maven中dependencyManagement管理项目依赖项

 更新时间:2024年01月07日 11:17:15   作者:全栈梦想家  
在开发 Java 项目时,管理和协调依赖项的版本号是一项重要而繁琐的任务,本文主要介绍了Maven中dependencyManagement管理项目依赖项,具有一定的参考价值,感兴趣的可以了解一下

介绍

在开发 Java 项目时,管理和协调依赖项的版本号是一项重要而繁琐的任务。

而 Maven 提供了 <dependencyManagement> 元素,用于定义项目中所有依赖项的版本。它允许您指定项目中每个依赖项的版本号,而无需在每个模块的 <dependencies> 部分中重复指定版本号。

本文将介绍 dependencyManagement 的作用,并演示如何在 Maven 项目中使用它来管理依赖项版本。

使用dependencyManagement可以统一管理项目中依赖包的版本号,当需要变更版本号时只需在父pom中修改即可;如果某个子项目需要指定一个特殊的版本号时,只需要在自己项目的pom.xml中显示声明一个版本号即可,此时子项目会使用自己声明的版本号,而不继承父项目的版本号

下面是一个简单的示例,说明了如何在 Maven 项目中使用它

首先在项目的父 pom.xml 文件中添加如下配置:

<project>
	...
	<properties>
		<swagger.version>3.0.0</swagger.version>
	</properties>
   
	<dependencyManagement>
		<dependencies>
			<!--swagger3-->
			<dependency>
			    <groupId>io.springfox</groupId>
			    <artifactId>springfox-boot-starter</artifactId>
			    <version>${swagger.version}</version>
			</dependency>
		</dependencies>
	</dependencyManagement>
	...
</project>

然后,在其他 Maven 子模块的 pom.xml 文件中,只需声明依赖项的 groupId 和 artifactId,而无需重复指定版本号:

<dependencies>
	<dependency>
		<groupId>io.springfox</groupId>
		<artifactId>springfox-boot-starter</artifactId>
		</dependency>
</dependencies>

子模块将从父级项目中继承定义的版本号,确保项目中所有使用的依赖项版本一致。

dependencyManagement与dependencies的区别

dependencies相对于dependencyManagement,所有声明在dependencies里的依赖都会自动引入,并默认被所有的子项目继承
dependencyManagement里只是声明依赖,并不会自动引入,因此子项目需要显示声明依赖。在子项目中声明了依赖项,且没有指定具体版本,才会从父项目中继承该项,并且version和scope都读取自父pom;另外如果子项目中指定了版本号,则会使用子项目中指定的版本
⚠️注意:一个无子工程的独立工程中如果使用dependencyManagement,那么它自己的pom.xml文件引入的依赖也可以不指定版本

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.ume.qa</groupId>
    <artifactId>SpringCloudGateway</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <spring-cloud.version>3.0.1</spring-cloud.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-webflux</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
            <version>3.0.3</version>
        </dependency>
        <!--  SpringCloud alibaba nacos    -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <exclusions>
                <exclusion>
                    <artifactId>spring-cloud-context</artifactId>
                    <groupId>org.springframework.cloud</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>spring-cloud-commons</artifactId>
                    <groupId>org.springframework.cloud</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>spring-cloud-starter</artifactId>
                    <groupId>org.springframework.cloud</groupId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bootstrap</artifactId>
        </dependency>

        <!--fegin组件-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
            <version>3.0.2</version>
            <exclusions>
                <exclusion>
                    <artifactId>spring-cloud-commons</artifactId>
                    <groupId>org.springframework.cloud</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>spring-cloud-starter</artifactId>
                    <groupId>org.springframework.cloud</groupId>
                </exclusion>
            </exclusions>
        </dependency>
        <!-- Feign Client for loadBalancing -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-loadbalancer</artifactId>
            <version>3.0.2</version>
            <exclusions>
                <exclusion>
                    <artifactId>spring-cloud-commons</artifactId>
                    <groupId>org.springframework.cloud</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>spring-cloud-context</artifactId>
                    <groupId>org.springframework.cloud</groupId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>2.4.2</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2.2.5.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

总结

使用 dependencyManagement 元素可以简化依赖项版本的管理,减少重复和错误的声明。通过将版本号集中在一个地方进行管理,确保项目中所有使用的依赖项的版本保持一致性。这不仅提高了开发效率,还能减少因依赖项版本不一致导致的问题。因此,在开发 Java 项目时,我们应该充分利用它来更好地管理项目的依赖项版本

到此这篇关于Maven中dependencyManagement管理项目依赖项的文章就介绍到这了,更多相关Maven dependencyManagement管理内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java合并PDF文档的三种常用方式总结

    Java合并PDF文档的三种常用方式总结

    这篇文章主要给大家介绍了关于Java合并PDF文档的三种常用方式,文中介绍的方式分别是Apache PDFBox、Spire.PDF(IceBlue)和iText PDF,每种方式都有其对应的pom.xml代码示例,,要的朋友可以参考下
    2024-12-12
  • java 字符串截取的实例详解

    java 字符串截取的实例详解

    这篇文章主要介绍了java 字符串截取的实例详解的相关资料,希望通过本文能帮助到大家,需要的朋友可以参考下
    2017-09-09
  • Java中final关键字和final的四种用法实例

    Java中final关键字和final的四种用法实例

    final关键字代表最终的、不可改变的,下面这篇文章主要给大家介绍了关于Java中final关键字和final的四种用法实例,文中通过图文以及实例代码介绍的非常详细,需要的朋友可以参考下
    2023-02-02
  • SpringBoot集成Redis—使用RedisRepositories详解

    SpringBoot集成Redis—使用RedisRepositories详解

    这篇文章主要介绍了SpringBoot集成Redis—使用RedisRepositories详解,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • Java Spring JdbcTemplate基本使用详解

    Java Spring JdbcTemplate基本使用详解

    JDBC已经能够满足大部分用户最基本的需求,但是在使用JDBC时,必须自己来管理数据库资源如:获取PreparedStatement,设置SQL语句参数,关闭连接等步骤
    2021-10-10
  • 详解JAVA 内存管理

    详解JAVA 内存管理

    这篇文章主要介绍了JAVA 内存管理的相关资料,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-07-07
  • springboot3.X版本集成mybatis遇到的问题及解决

    springboot3.X版本集成mybatis遇到的问题及解决

    在将SpringBoot3.X版本与MyBatis集成时,直接参考基于SpringBoot2.X的配置方法会导致各种报错,尤其是无法注入mapper的bean问题,这主要是因为SpringBoot3.X版本需要搭配MyBatis3.0.3及以上版本才能正常工作,通过更新maven配置至MyBatis3.0.3版本,可以解决这一问题
    2024-09-09
  • Java SpringMVC数据响应超详细讲解

    Java SpringMVC数据响应超详细讲解

    Spring MVC 是 Spring 提供的一个基于 MVC 设计模式的轻量级 Web 开发框架,本质上相当于 Servlet,Spring MVC 角色划分清晰,分工明细,本章来讲解SpringMVC数据响应
    2022-04-04
  • Classloader隔离技术在业务监控中的应用详解

    Classloader隔离技术在业务监控中的应用详解

    这篇文章主要为大家介绍了Classloader隔离技术在业务监控中的应用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • SpringMVC 接收前端传递的参数四种方式小结

    SpringMVC 接收前端传递的参数四种方式小结

    这篇文章主要介绍了SpringMVC 接收前端传递的参数四种方式小结,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-10-10

最新评论