You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Tomcat9与Spring Boot依赖适配求助:jboss-logging冲突及版本兼容问题

解决Tomcat9 + Spring Boot 2.5.x的jboss-logging依赖冲突及部署问题

问题背景

  • 适配Tomcat9选择Spring Boot 2.5.13版本,但存在jboss-logging依赖冲突
  • Spring Boot 3.0.6本地运行正常,但无法部署到Tomcat9,且因Debian 11软件源限制无法升级到Tomcat10

当前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>com.xxx</groupId>
  <artifactId>xxx</artifactId>
  <version>0.2</version>

  <name>xxx</name>
  <!-- FIXME change it to the project's website -->
  <url>xxxxxx</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>11</maven.compiler.source>
    <maven.compiler.target>11</maven.compiler.target>
    <tomcat.version>9.0.43</tomcat.version>
  </properties>

  <dependencies>
        <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-data-jpa</artifactId>
      <version>2.5.13</version>
    </dependency>

  <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
      <version>2.5.13</version>
  </dependency>

    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>8.0.29</version>
    </dependency>

    <dependency>
      <groupId>org.springdoc</groupId>
      <artifactId>springdoc-openapi</artifactId>
      <version>2.1.0</version>
      <type>pom</type>
    </dependency>

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-tomcat</artifactId>      
      <version>2.5.13</version>
      <scope>provided</scope>
    </dependency>

    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <version>1.18.24</version>
    </dependency>

    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
  </dependencies>

 <build>
    <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
      <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <version>2.5.13</version>
        </plugin>
      </plugins>
    </pluginManagement>
 </build>

  <packaging>war</packaging>
</project>

解决方案

1. 引入Spring Boot Parent统一依赖管理

通过parent pom自动管理所有Spring Boot相关依赖的版本,避免手动指定版本导致的冲突,同时自动处理依赖传递问题。

2. 排除冲突的jboss-logging依赖

在spring-boot-starter-data-jpa中排除jboss-logging,强制使用Spring Boot兼容的版本。

3. 适配springdoc-openapi版本

Spring Boot 2.5.x不兼容springdoc-openapi 2.x,需降级到1.6.x版本。

4. 优化打包配置

确保spring-boot-maven-plugin正确配置war打包,适配Tomcat9的部署要求。

修改后的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>

    <!-- 引入Spring Boot Parent统一管理依赖版本 -->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.5.13</version>
        <relativePath/>
    </parent>

    <groupId>com.xxx</groupId>
    <artifactId>xxx</artifactId>
    <version>0.2</version>
    <packaging>war</packaging>

    <name>xxx</name>
    <url>xxxxxx</url>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
        <tomcat.version>9.0.43</tomcat.version>
        <!-- 指定springdoc适配版本 -->
        <springdoc.version>1.6.14</springdoc.version>
    </properties>

    <dependencies>
        <!-- 排除jboss-logging冲突 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.jboss.logging</groupId>
                    <artifactId>jboss-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.29</version>
        </dependency>

        <!-- 适配Spring Boot 2.5.x的springdoc版本 -->
        <dependency>
            <groupId>org.springdoc</groupId>
            <artifactId>springdoc-openapi-ui</artifactId>
            <version>${springdoc.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <!-- 配置war打包,指定启动类 -->
                <configuration>
                    <mainClass>com.xxx.YourApplicationClass</mainClass>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

额外验证步骤

  • 执行mvn dependency:tree查看依赖树,确认jboss-logging版本统一且无冲突
  • 本地打包war包后,直接部署到Tomcat9测试运行
  • 确保Spring Boot启动类继承SpringBootServletInitializer,适配外部Tomcat部署:
@SpringBootApplication
public class YourApplicationClass extends SpringBootServletInitializer {
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(YourApplicationClass.class);
    }

    public static void main(String[] args) {
        SpringApplication.run(YourApplicationClass.class, args);
    }
}

内容的提问来源于stack exchange,提问作者Dave

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 06:12:05