今天记录一下maven的pom文件中的两个属性:DepencyManagement
,Dependencies
博客比较短,就简单记录.
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包。有点像接口与实现类的关系吧。
感谢观看。