Maven中的DepencyManagement与Dependencies的区别

今天记录一下maven的pom文件中的两个属性:DepencyManagementDependencies

博客比较短,就简单记录.


Dependencies

这个属性大家应该比较熟悉,就是引入依赖。这个属性可以算是pom文件的灵魂。里面可以放入若干的dependency,而dependency内可以放入jar包的坐标。有了这些坐标后,maven就会根据这些坐标去下载对应的jar。同时还会处理里面的依赖关系。

DepencyManagement

这个属性,目前我用的比较少。因为现在我还处于在单体应用开发阶段。即所有模块(用户模块、购物车模块、订单模块等等)都挤在一块。最终也是打成一个jar/war包发布到线上,所以整个应用就一个pom文件。而需要用到什么依赖直接写在Dependencies中即可。

而现在的软件开发趋势是分布式开发,也意味这一个应用内的很多模块会分开部署。会有很多的pom文件出来,这些pom文件中难保就会有相同的依赖坐标。这个时候程序思维就出来了,我们需要提高复用性,就要抽取出来。

这个时候DepencyManagement作用就出来了,我们可以在父工程的pom文件中添加这个属性,然后把重复的依赖坐标放入里面包括 <groupid>,<artifactId>,<version> 。接着在子模块的pom文件中引用父工程即可(<parent>标签)。同时记得要在子模块中引入所需的依赖(<dependency>标签内)。

这样之后,虽然子模块还是要写一些重复的依赖坐标。但可以不用指定版本号了,因为父工程帮我们统一了版本号。还有一个好处,假设要升级mybatis的版本号,那我们直接在父工程的pom文件中的<DepencyManagement>属性内,修改对应坐标的版本号即可,无需在一个又一个的子模块pom文件中修改。也降低了版本升级的开销。

有一个应用例子,比如我们开发一个SpringBoot应用时,我们在pom文件中不是引入了一个父工程吗:

  <parent>
  	<groupId>org.springframework.boot</groupId>
  	<artifactId>spring-boot-starter-parent</artifactId>
  	<version>1.5.2.RELEASE</version>
  </parent>

这样之后,还需要什么依赖就引入,而不用指定版本号:

		<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-mail</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

因为像上文说的,父工程已经帮我们统一了版本号了。

最后需要提一点,父工程只是声明依赖,并不是真正的引入。真正的引入还是在子模块内声明坐标,maven才会去联网下载jar包。有点像接口与实现类的关系吧。

感谢观看。

猜你喜欢

转载自blog.csdn.net/Jokeronee/article/details/107203346
今日推荐