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

Maven构建Spring Boot War包:多余文件自动引入及核心依赖Jar缺失问题求助

问题分析与解决方案

你遇到的问题核心是Spring Boot Maven插件默认将War包构建为可执行War,这种打包方式是为了让War可以直接通过java -jar命令运行,所以会自动加入Spring Boot Loader的相关类、分层配置文件(layer.idx),并且不会将依赖Jar直接放到WEB-INF/lib目录下——这就是你看不到那些Spring Boot Starter依赖,却看到大量loader类的原因。

解决方案步骤

1. 修改Spring Boot Maven插件配置,禁用可执行War特性

调整pom.xml中的spring-boot-maven-plugin,添加配置禁用可执行打包,同时排除Loader相关内容:

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
        <!-- 禁用可执行War,生成传统部署用的War包 -->
        <executable>false</executable>
        <!-- 明确排除Spring Boot Loader类 -->
        <war>
            <excludeLoader>true</excludeLoader>
        </war>
    </configuration>
</plugin>

2. 确保启动类适配外部Servlet容器

如果你的Spring Boot应用要部署到外部Tomcat等容器,启动类需要继承SpringBootServletInitializer并重写configure方法,这样容器才能正确加载Spring Boot上下文:

package com.meco.test;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;

@SpringBootApplication
public class TestServiceApplication extends SpringBootServletInitializer {

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(TestServiceApplication.class);
    }

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

3. 重新构建并验证

执行mvn clean install重新打包,然后用jar tf demon.war检查:

  • org/springframework/boot/loader/相关类会被移除
  • layer.idx和spring-boot-jarmode-layertools-2.5.2.jar也会消失
  • 所有Spring Boot Starter依赖(比如spring-boot-starter-2.5.2.jar、spring-boot-starter-jersey-2.5.2.jar等)都会出现在WEB-INF/lib目录下

补充说明

  • spring-boot-jarmode-layertools是Spring Boot分层打包的工具依赖,只有当插件构建可执行War/Jar时才会自动引入,禁用可执行特性后就不会被包含了。
  • 之前删除本地Maven仓库无效,是因为问题根源在插件配置,而非依赖缓存。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 23:32:32