如何更改现有 Spring Boot 应用程序中的嵌入式 tomcat 版本?
Posted
技术标签:
【中文标题】如何更改现有 Spring Boot 应用程序中的嵌入式 tomcat 版本?【英文标题】:How to change embedded tomcat's version in existing spring boot app? 【发布时间】:2018-08-17 22:31:52 【问题描述】:我目前正在运行带有嵌入式 tomcat 的 spring-boot version 1.4.0.RELEASE
应用程序。包含的Tomcat版本是8.5.4
需要将 tomcat 版本更新为9.x
。当我查看 mvnrepository here 时,我发现 tomcat 版本 9.0.5
有可用更新(如下图所示)
如果我的pom.xml
中没有办法直接提及这个版本,我应该如何在我的项目中使用这个版本?
我不想走传统的部署路线(外部 tomcat 上的 WAR 工件)。
【问题讨论】:
我怀疑它会起作用,tomcat 中有一些内部变化没有反映在 Spring Boot 1.4 的代码中。 好的。但是有没有办法改变那个版本呢?我准备将spring-boot
版本升级到2.0.0.RELEASE
但是有tomcat 版本8.5.28
只需指定您要使用的版本(假设您使用spring-boot-starter-parent
作为项目的父级。
【参考方案1】:
我认识的聚会迟到了,正在寻找类似的问题,我想我会分享一个更字面的提示。
您需要覆盖 在 spring 的父 pom 中设置的属性(这是强制性的)以适合您的情况(以及兼容性):
<properties>
......
<tomcat.version>9.0.5</tomcat.version>
......
<properties>
这是根据 [Introduction to Spring][1] 的。他们的示例显示了许多其他精心挑选的依赖项。 [1]:http://www.springboottutorial.com/spring-boot-starter-parent
【讨论】:
【参考方案2】:如果您使用的是spring boot gradle插件和spring boot starters..您可以通过在build.gradle中设置maven项目属性来自定义版本。
ext['tomcat.version'] = '9.0.45'
对于行家
<properties>
<tomcat.version>9.0.45</tomcat.version>
<properties>
可以在spring-boot-dependencies中找到所有可以自定义的外部依赖
【讨论】:
太糟糕了,你不能给出完整的例子来说明如何做到这一点。这是部分答案 使用 gradle 可以做到def tomcatVersion = '9.0.30'
和 dependencies implementation "org.apache.tomcat.embed:tomcat-embed-core:$tomcatVersion" implementation "org.apache.tomcat.embed:tomcat-embed-el:$tomcatVersion" implementation "org.apache.tomcat.embed:tomcat-embed-websocket:$tomcatVersion" implementation "org.apache.tomcat:tomcat-annotations-api:$tomcatVersion"
如果使用 maven,请在 <dependencyManagement>
中添加依赖项,否则项目可能根本不会更改它。
我不会以 Tomcat 10 为例,因为它是 jakartified 并且当前的 Spring 库无法使用它。【参考方案3】:
对于 Maven 项目
<properties>
...
<tomcat.version>8.0.53</tomcat.version>
</properties>
<dependencyManagement>
<dependencies>
<!-- NON-INFORMATIVE -->
<!-- <dependency>
<groupId>io.spring.platform</groupId>
<artifactId>platform-bom</artifactId>
<version>$bom.version</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>$spring-cloud.version</version>
<type>pom</type>
<scope>import</scope>
</dependency> -->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-core</artifactId>
<version>$tomcat.version</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-el</artifactId>
<version>$tomcat.version</version>
</dependency>
</dependencies>
</dependencyManagement>
【讨论】:
以上是关于如何更改现有 Spring Boot 应用程序中的嵌入式 tomcat 版本?的主要内容,如果未能解决你的问题,请参考以下文章
将 liquibase 添加到现有 Spring Boot 项目的正确方法
Spring Boot 应用程序“bean 类的 bean 名称与现有冲突” - 如何从 3rd 方库/依赖项中排除包/类?