定制Spring Boot的依赖库版本(Maven版)
在SpringBoot的Maven项目的pom.xml中,大多数情况下可以省略依赖库的版本指定。这是因为在后面的spring-boot-dependencies中已经定义了SpringBoot支持的各种库的版本,并且可以通过引用来查看。
这里之前一直在关注的是,比如在使用SpringBoot时,如果Tomcat方面发布了一个紧急的安全修复版本,如何单独更新Tomcat的版本呢?本文将通过实际的示例代码来验证这一点。
以下是示例代码。
https://github.com/msakamoto-sf/springboot-lib-version-change-demo
SpringBoot 2.1.1 を使用したMavenプロジェクトです。
示例代码的说明
这是一个由STS4生成的SpringBoot 2.1.1的简单Maven项目。容器使用默认的Tomcat,并添加了h2database。
仓库的pom.xml文件已经定制了版本。在标签内,覆盖了spring-boot-dependencies中定义的tomcat和h2的版本,如下所示。
<properties>
<java.version>1.8</java.version>
<tomcat.version>9.0.14</tomcat.version>
<h2.version>1.4.196</h2.version>
</properties>
我们首先将其恢复为当时生成的状态,并尝试构建和运行。
<properties>
<java.version>1.8</java.version>
</properties>
请使用 mvnw package 命令进行构建,然后使用 java -jar(jar文件)进行执行,并访问 http://localhost:18088/。您将看到显示以下类似版本信息的页面(此为2019-01-02前后版本的信息)。
servletContext.getServerInfo() -> Apache Tomcat/9.0.13
SELECT H2VERSION() -> 1.4.197
这是预先内嵌在spring-boot-dependencies中的版本。我们将尝试进行自定义。由于Tomcat已发布9.0.14版本,我们将更改为该版本,而对于h2database,我们将降低一个版本至1.4.196。
→ 当您进行更改后重新构建并运行时,变更结果应该会体现在存储库的pom.xml文件中,并确保确实显示出已更改的版本。
关于spring-boot-dependencies
STS4生成的pom.xml中,将spring-boot-starter-parent:2.1.1.RELEASE设置为parent。查看这个pom.xml可以发现,spring-boot-dependencies:2.1.1.RELEASE被指定为更高的parent。
查看spring-boot-dependencies的pom.xml可以发现,中注册了各种库的版本。
<?xml version="1.0" encoding="utf-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.1.1.RELEASE</version>
<packaging>pom</packaging>
<name>Spring Boot Dependencies</name>
<description>Spring Boot Dependencies</description>
<url>https://projects.spring.io/spring-boot/#</url>
<!-- ... -->
<properties>
<!-- ... -->
<h2.version>1.4.197</h2.version>
<!-- ... -->
<tomcat.version>9.0.13</tomcat.version>
这些定义在spring-boot-starter系列的pom.xml中,通过对个别库的依赖关系中的进行引用。
因此,应用程序的pom.xml中不需要指定。另外,spring-boot-dependencies定义了被确认为SpringBoot正常运作的版本号,因此可以保证一致性。无需担心”哦,这个版本好吗?”。
如果您想使用不同版本,只需在应用程序的pom.xml文件中覆盖相同的属性即可。请参阅官方参考文档以获取有关解释的更多信息。
-
- 13.1 Dependency Management
https://docs.spring.io/spring-boot/docs/2.1.1.RELEASE/reference/htmlsingle/#using-boot-dependency-management
总结
-
- SpringBoot の依存ライブラリのバージョンをカスタマイズするには、 spring-boot-dependencies 側で定義されているバージョンのプロパティをアプリ側のpom.xmlで上書きすればOK.
- ↑実際にサンプルコードで確認してみた。