一、dependencyManagement简介
dependencyManagement是Maven中的一个功能强大的元素,用于统一管理项目中的依赖版本以及依赖的一些基本信息,例如group ID、artifact ID、version、scope等等。
dependencyManagement将Maven项目中的依赖都放在一个统一的位置进行版本管理,使得从某种程度上减少了后期维护所需的人力和时间成本。
dependencyManagement可以应用在父子项目之间,使得父项目定义的依赖可以被子项目共享,并且在子项目中可以进行版本覆盖、依赖剔除等操作。
二、dependencyManagement使用方法
在Maven项目中使用dependencyManagement需要在pom.xml文件中添加以下代码:
<project> <!-- 一些基本的项目信息配置 --> <dependencies> <dependency> <groupId>com.example</groupId> <artifactId>example-lib</artifactId> <version>1.0.0</version> <scope>compile</scope> </dependency> <!-- 这里可以添加多个依赖 --> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>com.example</groupId> <artifactId>example-lib</artifactId> <version>1.2.0</version> <scope>compile</scope> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.25</version> <scope>compile</scope> </dependency> <!-- 这里可以添加多个依赖 --> </dependencies> </dependencyManagement> </project>
在<dependencyManagement>标签中定义需要管理的依赖,可以包含groupId、artifactId和version等信息。实际上,在这种情况下,定义的版本号并不会应用到项目中的依赖上,因为我们只是在定义依赖的版本信息。
在项目中引入依赖时可以直接省略版本号,Maven依赖版本会从dependencyManagement定义的版本中取得。如果需要覆盖dependencyManagement中的版本,可以直接在项目的依赖中重现定义,这样依赖版本就会被覆盖。
三、dependencyManagement与dependency区别
dependencyManagement和dependency的关系是,dependencyManagement维护的是依赖的版本信息,而dependency定义项目的依赖关系。
dependency和dependencyManagement的区别在于,dependencyManagement只是用来统一管理依赖版本号的,不会直接引入依赖,而dependency则直接引入依赖。
对于子项目来说,由于继承自父项目,父项目中定义的dependencyManagement可以在子项目中被直接引用,子项目也可以覆盖依赖的版本信息、依赖的范围等等。但如果子项目中没有依赖引用父项目中定义的依赖,则父项目中定义的依赖不会被引入到子项目中。
四、dependencyManagement的作用
1. 版本管理
dependencyManagement可以帮助我们统一管理项目中的依赖版本信息,避免由于各自在项目中引用自己的依赖版本,导致在集成时出现版本冲突的问题。
你可以通过在dependencyManagement标签中指定依赖的groupId、artifactId和version等信息,达到统一管理依赖版本信息的目的。如下所示:
<dependencyManagement> <dependencies> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.58</version> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.4</version> </dependency> </dependencies> </dependencyManagement>
2. 依赖剔除
dependencyManagement不仅可以掌管依赖版本号的统一管理,还可以通过设置依赖剔除功能来实现对依赖的管理。剔除依赖主要是为了避免依赖冲突。
在dependencyManagement标签中,可以通过exclusions标签剔除项目中的某些依赖。如下所示:
<dependencyManagement> <dependencies> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.58</version> <exclusions> <exclusion> <groupId>com.sun.xml.bind</groupId> <artifactId>jaxb-impl</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.4</version> </dependency> </dependencies> </dependencyManagement>
在上面的例子中,依赖fastjson的POM文件中排除了jaxb-impl依赖。
3. 依赖范围管理
dependencyManagement还可以实现依赖范围的管理,通过dependencyManagement标签中的dependency标签实现。
在dependencyManagement标签中,可以通过dependency标签指定依赖的scope(依赖范围),如下所示:
<dependencyManagement> <dependencies> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.58</version> <scope>provided</scope> </dependency> </dependencies> </dependencyManagement>
在上面的例子中,fastjson的依赖范围为provided,即该依赖是由外部环境提供的,不需要打包到项目的jar包中。
五、总结
dependencyManagement是Maven中一个重要、强大的功能,可以帮助我们统一管理项目中的依赖版本信息,并且在项目之间实现依赖共享、覆盖和剔除等操作。如果你正在使用Maven构建项目,那么一起来学习和使用dependencyManagement吧。
原创文章,作者:VGUFD,如若转载,请注明出处:https://www.506064.com/n/370257.html