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

摘要:
BOM维护人员负责版本升级,并确保BOM中定义的jar包版本之间的兼容性。子模块不需要指定版本信息:<dependencyManagement><dependencies><groupId>maven</groupId><artifactId>X</artifactId><version>1.0</version><type>pom</type><scope>import</scope></dependencie></dependencies<<dependency><depistencie>具有2点扩展:1。子模块可以继承多个父模块/类型˃import2。父级当按照提供的方式定义模块时,在引用子模块时要小心。所提供的是不可传递的,也就是说,如果您依赖于jar包并且提供了其范围,则不会通过依赖于jar依赖关系转移将jar添加到项目中。如果在2018年之后使用intellj,则可以使用以下方法将提供的jar包添加到类路径中。

  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的一个小坑第1张

 

免责声明:文章转载自《maven之BOM及BOM和provided的一个小坑》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇C程序设计语言 (K&amp;amp;R)【MFC】获取文件大小的方法下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Java读取Unicode文件(UTF-8等)时碰到的BOM首字符问题

在Windows下用文本编辑器创建的文本文件,如果选择以UTF-8等Unicode格式保存,会在文件头(第一个字符)加入一个BOM标识。   这个标识在Java读取文件的时候,不会被去掉,而且String.trim()也无法删除。如果用readLine()读取第一行存进String里面,这个String的length会比看到的大1,而且第一个字符就是这个B...

python ConfigParser读取配置文件,及解决报错(去掉BOM)ConfigParser.MissingSectionHeaderError: File contains no section headers的方法

先说一下在读取配置文件时报错的问题--ConfigParser.MissingSectionHeaderError: File contains no section headers 问题描述: 在练习ConfigParser读取配置文件时,cmd一直报一个错:ConfigParser.MissingSectionHeaderError: File con...

官方:金蝶实际成本在制品材料分配详解

解释:以下文档来自金蝶K3 WISE 15.0产品说明文档 1.参与分配标准列分配 【应用场景】:适用于对于材料费用分配没有特殊要求的企业,在产品和完工产品分摊没有特别需要注意的企业。【备 注】:在产品材料成本不单独计算,在产品和完工产品的成本按在产品分配标准列所选定的标准进行计算。【特别说明】:该分配标准与在产品分配标准相关,已(以)在产品分配标准为准。...

C#-WebForm-JS知识:基础部分、BOM部分、DOM部分、JS事件

---恢复内容开始--- 一、基础部分: 1、JavaScript 是什么? 是一门脚本语言,是属于弱类型(语言语法很随意),C#是强类型(语言语法非常严格)(李献策lxc) 优点:JS 执行速度快 2、JS 与java有什么关系?  没有任何关系 3、JS 能做什么事情?   能控制浏览器 BOM   控制元素 DOM JS不能做什么?   不能操作文件...

Java处理不同的字符编码流

在实际开发中,可能会处理一些文本信息,我们可能使用 BufferedReader bfr = new BufferedReader(new InputStreamReader(bis,encoding)); 这样的方式来处理输入流,然后就可以一行一行的处理信息了。 但是,这里的encoding一般都不会确定,有的是GBK格式,有的是UTF-8格式,可能还有...

BOM的介绍

BOM的概念 BOM(Browser Object Model) 是指浏览器对象模型。 浏览器对象模型提供了独立于内容的、可以与浏览器窗口进行互动的对象结构。 BOM由多个对象组成,其中代表浏览器窗口的Window对象是BOM的顶层对象,其他对象都是该对象的子对象。 我们在浏览器中的一些操作都可以使用BOM的方式进行编程处理, 比如:刷新浏览器、后退、前进...