Maven中dependencyManagement管理項(xiàng)目依賴項(xiàng)
介紹
在開發(fā) Java 項(xiàng)目時(shí),管理和協(xié)調(diào)依賴項(xiàng)的版本號(hào)是一項(xiàng)重要而繁瑣的任務(wù)。
而 Maven 提供了 <dependencyManagement> 元素,用于定義項(xiàng)目中所有依賴項(xiàng)的版本。它允許您指定項(xiàng)目中每個(gè)依賴項(xiàng)的版本號(hào),而無需在每個(gè)模塊的 <dependencies> 部分中重復(fù)指定版本號(hào)。
本文將介紹 dependencyManagement 的作用,并演示如何在 Maven 項(xiàng)目中使用它來管理依賴項(xiàng)版本。
使用dependencyManagement可以統(tǒng)一管理項(xiàng)目中依賴包的版本號(hào),當(dāng)需要變更版本號(hào)時(shí)只需在父pom中修改即可;如果某個(gè)子項(xiàng)目需要指定一個(gè)特殊的版本號(hào)時(shí),只需要在自己項(xiàng)目的pom.xml中顯示聲明一個(gè)版本號(hào)即可,此時(shí)子項(xiàng)目會(huì)使用自己聲明的版本號(hào),而不繼承父項(xiàng)目的版本號(hào)
下面是一個(gè)簡(jiǎn)單的示例,說明了如何在 Maven 項(xiàng)目中使用它
首先在項(xiàng)目的父 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 文件中,只需聲明依賴項(xiàng)的 groupId 和 artifactId,而無需重復(fù)指定版本號(hào):
<dependencies> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-boot-starter</artifactId> </dependency> </dependencies>
子模塊將從父級(jí)項(xiàng)目中繼承定義的版本號(hào),確保項(xiàng)目中所有使用的依賴項(xiàng)版本一致。
dependencyManagement與dependencies的區(qū)別
dependencies相對(duì)于dependencyManagement,所有聲明在dependencies里的依賴都會(huì)自動(dòng)引入,并默認(rèn)被所有的子項(xiàng)目繼承
dependencyManagement里只是聲明依賴,并不會(huì)自動(dòng)引入,因此子項(xiàng)目需要顯示聲明依賴。在子項(xiàng)目中聲明了依賴項(xiàng),且沒有指定具體版本,才會(huì)從父項(xiàng)目中繼承該項(xiàng),并且version和scope都讀取自父pom;另外如果子項(xiàng)目中指定了版本號(hào),則會(huì)使用子項(xiàng)目中指定的版本
??注意:一個(gè)無子工程的獨(dú)立工程中如果使用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>總結(jié)
使用 dependencyManagement 元素可以簡(jiǎn)化依賴項(xiàng)版本的管理,減少重復(fù)和錯(cuò)誤的聲明。通過將版本號(hào)集中在一個(gè)地方進(jìn)行管理,確保項(xiàng)目中所有使用的依賴項(xiàng)的版本保持一致性。這不僅提高了開發(fā)效率,還能減少因依賴項(xiàng)版本不一致導(dǎo)致的問題。因此,在開發(fā) Java 項(xiàng)目時(shí),我們應(yīng)該充分利用它來更好地管理項(xiàng)目的依賴項(xiàng)版本
到此這篇關(guān)于Maven中dependencyManagement管理項(xiàng)目依賴項(xiàng)的文章就介紹到這了,更多相關(guān)Maven dependencyManagement管理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
restTemplate發(fā)送get與post請(qǐng)求并且?guī)?shù)問題
這篇文章主要介紹了restTemplate發(fā)送get與post請(qǐng)求并且?guī)?shù)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07
java?jar包后臺(tái)運(yùn)行的兩種方式詳解
后臺(tái)運(yùn)行jar的方法有多種方法可以實(shí)現(xiàn)Java后臺(tái)運(yùn)行jar文件,下面介紹其中兩種常見的方法,下面這篇文章主要給大家介紹了關(guān)于java?jar包后臺(tái)運(yùn)行的兩種方式,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-07-07
SpringBoot自動(dòng)裝配之多數(shù)據(jù)源SDK解決Dubbo性能瓶頸詳解
這篇文章主要為大家詳細(xì)介紹了SpringBoot自動(dòng)裝配中如何通過多數(shù)據(jù)源SDK解決Dubbo性能瓶頸,文中的示例代碼講解詳細(xì),有需要的小伙伴可以了解下2025-09-09
Mybatis的sql語句執(zhí)行異常后打印到日志問題
文章介紹了一種Mybatis異常日志打印方案,主要通過Mybatis攔截器獲取執(zhí)行的sql語句,并利用ThreadLocal存儲(chǔ),以避免多線程下的sql語句覆蓋問題,當(dāng)異常發(fā)生時(shí),從ThreadLocal中取出sql語句并打印到單獨(dú)的日志文件中,方便數(shù)據(jù)恢復(fù),該方案經(jīng)過壓力測(cè)試2024-10-10
Springboot工具類FileCopyUtils使用教程
這篇文章主要介紹了Springboot內(nèi)置的工具類之FileCopyUtils的使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2022-12-12
SpringBoot+mybatis實(shí)現(xiàn)多數(shù)據(jù)源支持操作
這篇文章主要介紹了SpringBoot+mybatis實(shí)現(xiàn)多數(shù)據(jù)源支持操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-10-10

