关于依赖
简介
Spring Boot 自带了一个它能够支持的依赖表,在用的时候不需要提供这些依赖的版本信息,Spring Boot会帮你管理好,更新Spring Boot的时候,依赖也会跟着更新,从而保持一致。
这个依赖list包含了Spring Boot能够包含的所有module模块,每一个发行版Spring Boot都对应着一个基础版本的Spring框架,不建议去定义版本号。
spring-boot-starter-parent.pom
文档说这个parent.pom文件里面包含了
- JAVA 1.8默认编译level
- UTF-8的编码
- 一个继承自spring-boot-dependencies的依赖管理部分,来管理各种依赖,这些依赖可以在你自己的pom文件里面省略标签,不用写版本号了。
- An execution of the repackage goal with a repackage execution id.
- Sensible resource filtering.
- Sensible plugin configuration
- Sensible resource filtering for application.properties and application.yml including profile-specific files (for example, application-dev.properties and application-dev.yml)
- 也就是说各种文件会帮你打包好。让我们一探parent 配置文件。
- control + 左键就可以进入。
- 首先最上面有一个parent父配置文件,用的是相对路径。
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.1.0.RELEASE</version>
<relativePath>../../spring-boot-dependencies</relativePath>
</parent>
- 接下来是一些定义的java版本号,编码
<properties>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<resource.delimiter>@</resource.delimiter>
<mavenpiler.source>${java.version}</mavenpiler.source>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<mavenpiler.target>${java.version}</mavenpiler.target>
</properties>
- 之后就是插件等,就不看了,去看看它的父pom。进入父pom的第一眼就是各种依赖,有很多。版本号也均写好了。
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot</artifactId>
<version>2.1.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-test</artifactId>
<version>2.1.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-test-autoconfigure</artifactId>
<version>2.1.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-actuator</artifactId>
<version>2.1.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-actuator-autoconfigure</artifactId>
<version>2.1.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure</artifactId>
<version>2.1.0.RELEASE</version>
</dependency>
看完了就验证了文档所说的那个样子一共是两个pom,一个负责文件的打包,插件,版本号等,一个负责管理各种各样的依赖,(最下面也有一些插件)分工明确。
覆盖并使用使用自己的依赖版本
1.在使用parent的情况下:
在使用spring-boot-starter-parent.pom的时候需要指明版本号,当使用其它starter的时候可以省略版本号。你可以通过覆盖properties标签的property标签来达到修改依赖版本号的目的,但是!请看下面:在依赖pom里面确实定义了很多version来供下面使用,覆盖的确可以更改。往下翻就知道Spring Boot大家族的版本号是一致的,不是properties标签中定义的,文档也说不要去修改这些。
properties属性
<properties>
<activemq.version>5.15.7</activemq.version>
<antlr2.version>2.7.7</antlr2.version>
<appengine-sdk.version>1.9.67</appengine-sdk.version>
<artemis.version>2.6.3</artemis.version>
<aspectj.version>1.9.2</aspectj.version>
<assertj.version>3.11.1</assertj.version>
<atomikos.version>4.0.6</atomikos.version>
<bitronix.version>2.1.4</bitronix.version>
<build-helper-maven-plugin.version>3.0.0</build-helper-maven-plugin.version>
<byte-buddy.version>1.9.3</byte-buddy.version>
<caffeine.version>2.6.2</caffeine.version>
<cassandra-driver.version>3.6.0</cassandra-driver.version>
<classmate.version>1.4.0</classmate.version>
<commons-codec.version>1.11</commons-codec.version>
<commons-dbcp2.version>2.5.0</commons-dbcp2.version>
<commons-lang3.version>3.8.1</commons-lang3.version>
<commons-pool.version>1.6</commons-pool.version>
<commons-pool2.version>2.6.0</commons-pool2.version>
已经写好的依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot</artifactId>
<version>2.1.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-test</artifactId>
<version>2.1.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-test-autoconfigure</artifactId>
<version>2.1.0.RELEASE</version>
2.不继承parent如何引入自己的父级依赖并且覆盖相应的版本号?
如果你公司有自己的父级模块,这个时候就不能通过parent来继承这个spring-boot-starter-parent pom了。you can still keep the benefit of the dependency management (but not the plugin management) by using a scope=import dependency。
<dependencyManagement>
<dependencies>
<dependency>
<!-- Import dependency management from Spring Boot -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.1.0.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
如果需要覆盖这样即可:
<dependencyManagement>
<dependencies>
<!-- Override Spring Data release train provided by Spring Boot -->
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-releasetrain</artifactId>
<version>Fowler-SR2</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.1.0.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
关于<scope> import 可以参考这篇:https://blog.csdn/mn960mn/article/details/50894022 可以解决maven单继承的问题。
更多推荐
Spring Boot (二):关于Spring Boot的pom 配置。spring-boot-starter-parent.pom
发布评论