002 依赖管理

Posted trekxu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了002 依赖管理相关的知识,希望对你有一定的参考价值。

一 .概述

  在我们使用maven构建项目的时候,有一个问题是非常麻烦的,那就是依赖的管理,尽管maven能够帮助我们在一定的程度上解决这个问题,但是依赖版本之间的问题,依然是一个很头疼的问题.

  在springboot之中,为了更快的构建项目,为我们提供了一个依赖管理的功能.  


二 .解决依赖管理的问题

  springboot为我们提供了一个父pom文件,在这个文件之中,为我们制定好了依赖的版本,这些版本都是经过测试之后的稳定版本,这样就解决了我们的依赖版本的问题.

  我们一般情况下称这种机制为版本仲裁器.

  在springboot之中,为哦我们提供了两个方式进行:

  [1]引入一个springboot的父pom完成

  [2]加载一个springboot的依赖管理器

(1)使用springboot的父pom文件  

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

我们一般将这个父pom文件定义在一个我们自己的父pom文件之中,这样就能使用maven的聚合功能.

(2)使用依赖管理器

  有的时候,我们已经有了一个父pom文件了,上面的这种方式就不能使用了.为此,springboot为我们提供了一个依赖管理器帮助我们使用springboot.  

<dependencyManagement>
     <dependencies>
        <dependency>
            <!-- Import dependency management from Spring Boot -->
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>1.5.16.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

三 .覆盖依赖版本信息

  有的时候,我们不想使用springboot提供的版本信息,比如在thymeleaf的使用上,我们就需要覆盖掉上述的依赖版本信息.

  本次,我们覆盖掉thymeleaf的信息.

[1]覆盖parent的pom的版本信息

  我们知道,在springboot的父pom信息之中,版本的信息都放在属性之中,如下: 

<properties>
        <!-- Dependency versions -->
        <activemq.version>5.14.5</activemq.version>
        <antlr2.version>2.7.7</antlr2.version>
        <appengine-sdk.version>1.9.59</appengine-sdk.version>
        <artemis.version>1.5.5</artemis.version>
        <aspectj.version>1.8.13</aspectj.version>
        <assertj.version>2.6.0</assertj.version>
        <atomikos.version>3.9.3</atomikos.version>
        <bitronix.version>2.1.4</bitronix.version>

我们如果想覆盖的话,就比较容易了,我们只需要覆盖掉这些属性就行了,本次我们使用thymeleaf做演示.  

<thymeleaf.version>2.1.6.RELEASE</thymeleaf.version>
<thymeleaf-layout-dialect.version>1.4.0</thymeleaf-layout-dialect.version>

上面是springboot默认使用的thymealf的版本,我们只需要覆盖掉属性就可以了.

  我们首先看看默认引入的jar文件的版本:

  技术分享图片

我们从上面的依赖图中发现,确实就是属性之中定义的版本信息,如果想要覆盖,只需要加入如下的信息就好了.  

<properties>
    <thymeleaf.version>3.0.2.RELEASE</thymeleaf.version>
    <thymeleaf-layout-dialect.version>2.1.1</thymeleaf-layout-dialect.version>
</properties>

我们发现,我们就是在我们自己的pom文件之中覆盖了上面的版本属性.

技术分享图片

我们现在发现,我们的thymeleaf的信息被覆盖掉了.

[2]在依赖管理器之中覆盖版本信息

  比起在父pom之中覆盖版本信息而言,这种方式就比较麻烦了.

  我们首先需要排除掉依赖,然后再加入我们自己的依赖才可以.

<dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>1.5.9.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.thymeleaf</groupId>
                <artifactId>thymeleaf</artifactId>
                <version>3.0.2.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>org.thymeleaf</groupId>
                <artifactId>thymeleaf-spring4</artifactId>
                <version>2.1.0</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

我们这里使用的就是在依赖管理之中,添加对应的的thymeleaf的版本,这样按照依赖传递的原则,显示声明的优先级要高,我们就覆盖掉了原先的thymeleaf的内容了.

  但是,这样我们在使用的时候就需要自己手动添加依赖了.  

 


以上是关于002 依赖管理的主要内容,如果未能解决你的问题,请参考以下文章

HLS NGINX-RTMP [错误] 1281#0:* 58 hls:强制片段拆分:10.002 秒

Yarn: 一个新的JavaScript模块管理器

002 环境配置

使用循环片段依赖关系模块化单活动Android应用程序

SpringBoot脚手架项目002-004.Spring IOC_权限管理系统_Spring:什么是IOCSpring Bean注入SpringBean的注解bean的加载流程

Spring_002 依赖注入方式实现