• Maven多模块开发SpringBoot项目自定义第三方依赖版本


    参考:官方文档 - Build System of Maven
    https://blog.didispace.com/books/spring-boot-reference/IX. ‘How-to’ guides/80.3 Customize dependency versions.html
    对于 SpringBoot 使用 Maven 构建项目做依赖管理大致分下面两种情况,一种是以 spring-boot-starter-parent 作为父模块,属于默认的方式;另一种是不用 Parent POM 来构建项目,本文着重介绍第二种方式来修改依赖版本的方法。

    spring-boot-starter-parent 分析

    <!-- Inherit defaults from Spring Boot -->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.5.RELEASE</version>
    </parent>
    
    • 进入 spring-boot-starter-parent,可以看到 spring-boot-dependencies 做父依赖管理;
      spring-boot-starter-parent
    • 进入 spring-boot-dependencies, 这里有 SpringBoot 以及常用第三方依赖的版本信息,默认引入其他依赖会使用这里的版本定义。
      spring-boot-dependencies

    第三方依赖版本修改

    现在我们可以看到 spring-boot-dependencies 中定义了很多第三方依赖有版本,下面介绍如何修改这些版本。

    • 注意:每个Spring Boot发布都是基于一些特定的第三方依赖集进行设计和测试的,覆盖版本可能导致兼容性问题。
    • Gradle中为了覆盖依赖版本,你需要指定如下所示的version:ext['slf4j.version'] = '1.7.5'

    1. 继承自 spring-boot-dependencies

    也就是说在pom 定义时的父模块必须直接或间接继承自 spring-boot-dependencies

    如 pom.xml 定义了:(当前版本的Elasticsearch版本为6.8.6)

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

    当我们需要修改版本信息时,只需要在 pom 文件中重写 properties 属性

    	<properties>
    	    <elasticsearch.version>7.4.2</elasticsearch.version>
    	</properties>
    

    注意:

    • 这里 <properties> 这种定义属性名要和 spring-boot-dependencies 中属性名一样。
    • 这里是 Maven 项目继承(直接或间接)自 spring-boot-starter-dependencies 才有效。

    2. dependencyManagement 引用 spring-boot-dependencies

    也就是说,项目中使用了 <scope>import</scope>,将 spring-boot-dependencies 添加到自己的 dependencyManagement 片段。

    如 pom.xml 定义了:

    <dependencyManagement>
    	<dependencies>
    		<dependency>
    		   <groupId>org.springframework.boot</groupId>
    		   <artifactId>spring-boot-dependencies</artifactId>
    		   <version>${spring.boot.version}</version>
    		   <type>pom</type>
    		   <scope>import</scope>
    		</dependency>
    	</dependencies>
    </dependencyManagement>
    

    这种情况下修改版本,则需要在 pom 文件中重新定义要修改版本依赖的 artifact 而不是覆盖属性版本信息。

    <dependency>
    	<groupId>org.elasticsearch</groupId>
    	<artifactId>elasticsearch</artifactId>
    	<version>${elasticsearch.version}</version>
    </dependency>
    <dependency>
    	<groupId>org.elasticsearch.client</groupId>
    	<artifactId>elasticsearch-rest-client</artifactId>
    	<version>${elasticsearch.version}</version>
    </dependency>
    

    问题来源:尚硅谷-谷粒商城 Elasticsearch 项目文档

    spring-boot-starter-parent 补充

    参考官方文档

    Maven users can inherit from the spring-boot-starter-parent project to
    obtain sensible defaults. The parent project provides the following
    features:

    • Java 1.8 as the default compiler level.

    • UTF-8 source encoding.

    • A Dependency Management section, inherited from the
      spring-boot-dependencies pom, that manages the versions of common
      dependencies. This dependency management lets you omit tags
      for those dependencies when used in your own pom.

    • An execution of the repackage goal with a repackage execution id.

    • Sensible resource filtering.

    • Sensible plugin configuration (exec plugin, Git commit ID, and shade).

    • Sensible resource filtering for application.properties and
      application.yml including profile-specific files (for example,
      application-dev.properties and application-dev.yml)

    Note that, since the application.properties and application.yml files
    accept Spring style placeholders (${…​}), the Maven filtering is
    changed to use @..@ placeholders. (You can override that by setting a
    Maven property called resource.delimiter.)

    最后一段例子:Maven filtering 使用

    spring-boot-starter-parent 默认使用 jdk 1.8、UTF-8 编码和一些依赖的版本控制,所以在项目中的 dependencyManagement 中不要重复引用 已有的依赖,否则会导致子模块不能继承父模块依赖的情况出现。

    不会的东西只有怀着一颗狂妄的心,假装能把它看穿吧。
  • 相关阅读:
    yum 在线安装LAMP
    python-scrapy-增量式
    python-scrapy-分布式爬取
    python-scrapy-全站数据爬取-CrawlSpider
    python-scrapy-中间件的学习
    python-scrapy深度爬取
    python-scrapy环境配置
    django DOM
    window10设置环境变量(以设置虚拟环境和SQL为例)
    加入园子啦
  • 原文地址:https://www.cnblogs.com/zhangshuaiyin/p/15035819.html
Copyright © 2020-2023  润新知