Maven中dependencies和dependencyManagement

dependencies和dependencyManagement的区别概述

在 pom.xml 文件中,我们可以看到,dependencies 是 dependency 的父元素,而 dependencyManagement 又是 dependencies 的父元素,而 dependencies 元素的使用情况又分为两种,一种,dependencies 元素外没有 dependencyManagement父元素,另一种,dependencies 元素外还存在 dependencyManagement 父元素。当然,两种使用情况可以在同一 pom.xml文件中共存,因为二者的作用不同。

我们知道 dependency 元素是用来定义本项目对其他项目的依赖关系的。那么, dependencies 和 dependencyManagement中 dependency 的作用又有什么不同呢?从宏观上讲,dependencies 中的 dependency 元素下声明的依赖会被引入当前项目,而且在子项目中即使不写该依赖项,依旧会从父项目中继承该依赖项(全部继承),而 dependencyManagement 中的 dependencies 中的 dependency 元素下声明的依赖不会被引入当前项目,它仅仅是一个声明,如果在子项目中不写该依赖项,则不会从父项目中继承该依赖项,如果子项目真的需要引入该依赖,则在声明的时候,可以不用指定具体版本号,会自动继承父项目 dependencyManagement 中声明的版本号,从而实现了对依赖版本的统一管理。当然,如果子项目需要使用不同于父项目中声明的版本号,则需要在声明时指定版本号。

dependencyManagement小结

通过 dependencyManagement 元素,可以将项目的依赖关系细节收归一处,方便管理和升级。然而,我们在享受 dependencyManagement 元素带来的巨大便利的同时,需要特别注意的是,通过依赖传递而被引入的项目依赖的版本(version)和有效范围(scope)都会受到 dependencyManagement 元素中对应依赖的控制(如果存在对应依赖的话)。例如:项目A需要依赖项目B和项目C,项目A的 dependencyManagement 元素中声明了项目B的版本为1.0,如果此时项目C也依赖项目B,而且只有项目B的版本大于等于2.0,项目C才能运行。这时候,项目A中引入对项目B的依赖,其版本按照 dependencyManagement 中的声明为1.0版本,这时候就会导致项目不能正常运行。这一点,需要特别注意。

<!-- 声明版本号 在<dependencyManagement>中<version>${键} 加入键也就是 properties 中
加入<键> 值:版本号 </键>一至更改版本-->
	<properties>
		<!-- lib version -->
		<mybais.version>3.4.6</mybais.version>

		<!-- plugins version -->
		<tomcat7-maven-plugin.version>2.2</tomcat7-maven-plugin.version>
	</properties>
<!-- 锁定版本,并不会真的引入jar包 -->
	<dependencyManagement>
		<dependencies>
			<!-- mybais -->
			<dependency>
				<groupId>org.mybatis</groupId>
				<artifactId>mybatis</artifactId>
				<version>${mybais.version}</version>
			</dependency>
		</dependencies>
	</dependencyManagement>

    <!-- 插件 -->
    <plugins>
			<plugin>
				<groupId>org.apache.tomcat.maven</groupId>
				<artifactId>tomcat7-maven-plugin</artifactId>
				<version>${tomcat7-maven-plugin.version}</version>
				<configuration>
					<url>http://localhost:8080/manager/text</url>
					<username>aa</username>
					<password>123</password>
				</configuration>
			</plugin>
    </plugins>

猜你喜欢

转载自blog.csdn.net/hanglife/article/details/90035083