码迷,mamicode.com
首页 > 其他好文 > 详细

maven之BOM及BOM和provided的一个小坑

时间:2018-10-16 02:08:31      阅读:404      评论:0      收藏:0      [点我收藏+]

标签:pom   span   int   它的   集成   服务   path   src   http   

  BOM(Bill of Materials)定义一整套相互兼容的jar包版本集合,使用时只需要依赖该BOM文件,即可放心的使用需要的依赖jar包,且无需再指定版本号。BOM的维护方负责版本升级,并保证BOM中定义的jar包版本之间的兼容性。

 

  

  子模块很多时,可以使用dependencyManagement在父模块中统一管理。

  父模块中配置:

<groupId>maven</groupId>
<artifactId>X</artifactId>
<packaging>pom</packaging>
<version>1.0</version>

<dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
                <version>1.2.3.RELEASE</version>
            </dependency>
        </dependencies>
</dependencyManagement>

  packaging不一定是pom,也可以是jar和war。

  子模块则无需指定版本信息:

<dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>maven</groupId>
        <artifactId>X</artifactId>
        <version>1.0</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
    </dependencies>
 </dependencyManagement>

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

 

  有2点扩展:

       1. 子模块可以继承多个父模块

<dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>maven</groupId>
        <artifactId>X</artifactId>
        <version>1.0</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
      <dependency>
        <groupId>maven</groupId>
        <artifactId>Y</artifactId>
        <version>1.0</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
    </dependencies>
  </dependencyManagement>

  2.父模块定义的是provided时,子模块在引用时要小心。

          这种应用场景是,多个微服务的docker镜像依赖于一个基础镜像,则可以将基础镜像中集成的公共jar包做成BOM,则各微服务依赖的jar包可以做到统一。

     provided是没有传递性的,也就是说,如果你依赖的某个jar包,它的某个jar的范围是provided,那么该jar不会在你的工程中依靠jar依赖传递加入到你的工程中。

<dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
                <version>1.2.3.RELEASE</version>
                 <scope>provided</scope>
            </dependency>
        </dependencies>
</dependencyManagement>

    子工程引用该pom时,发现classpath中没有从父类中集成到provided范围的jar包。

            如果使用intellj,版本在2018之后,可以使用以下方法把provided范围的jar包加到classpath中。

技术分享图片

 

maven之BOM及BOM和provided的一个小坑

标签:pom   span   int   它的   集成   服务   path   src   http   

原文地址:https://www.cnblogs.com/lnlvinso/p/9795046.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!