理解 maven 依赖配置 <dependency> 中的 <type>pom</type>

对于聚合工程的微服务,pom的依赖是一个非常有特色的地方

用法一:

首先对于父工程:
当一个父pom中的dependencyManagement 标签中需要导入另一个pom中的dependencyManagement的时候,必须同时使用importpom


     
         
             
             org.springframework.boot
             spring-boot-dependencies
             2.0.1.BUILD-SNAPSHOT
             pom
             import
       

   



这个时候,该pom中dependencyManagement就会包含导入的spring-boot-dependencies中的所有dependencyManagement

这是为了解决pom类型的父工程单继承的问题,通过导入,可以导入各种其他父工程的dependencyManagement

注意:dependencyManagement只在父工程(即pom类型的maven工程)中声明,在子工程中定义无需声明版本从而生效。如果在jar类型的maven工程中添加了dependencyManagement,是没有意义的。

好处:当我们需要引入很多 jar 包的时候,会导致 pom.xml 过大,如使用 CXF 时,项目中可能要引入如下很多依赖包,此时,依赖包很多,导致 pom.xml 文件较大。我们可以想到的一种解决方案是定义一个父项目,但是父项目只有一个,也有可能导致父项目的 pom.xml 文件过大。这个时候我们引进来一个 type 为 pom,意味着我们可以将所有的 jar 包打包成一个 pom,然后我们依赖了 pom,即可以下载下来所有依赖的 jar 包。

用法二:
说明:当需要把一些依赖定义到一个pom工程中,但是由于maven单继承机制,子工程又想通过依赖引入该pom工程中的所有依赖,只需要添加pom
如下:


  
      org.sonatype.mavenbook
         persistence-deps
         1.0
      pom
   
 


这是为了解决子工程单继承的问题,通过pom可以依赖于其他的pom父工程,从而将pom工程中的依赖都传递过来

type 默认是jar,依赖jar工程时可以不写type标签,所以如果依赖于一个jar工程,而jar工程中包含大量的依赖,也会一起传递过来,这也就是maven依赖传递的原理。

综上:
这样做的好处是:

1.统一管理一个最初的版本,不需要到处定义

2.子model引入依赖只需要指定groupId、artifactId即可(版本号继承父类)

3.只会定义一个统一的初始的版本,但是不会真的引入依赖,子model不会继承parent中dependencyManagement所有预定义的depandency

那么问题来了,为了便于管理那么在父工程内dependencyManagement中添加了多个依赖,这对于子model来说就是多个父model(也可以理解为多个标签),而maven的继承和java的继承规范化是一致的,

那么如何处理让子model可以多继承父model,答案就是在每个依赖中添加pomimport

里的值默认值是jar表示引入的是jar包,这里使用的是pom表示导入的是父模块
中的值import代表把父模块中的jar包导入进来,不过需要注意的是import,这种方式只能用在中。

你可能感兴趣的:(maven,java,spring,boot)