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

maven-assembly-plugin打fat jar后bat启动报META-INF/spring.factories错误

问题解决方案

该报错核心是fat jar内的META-INF/spring.factories文件缺失Spring Boot自动配置相关条目,Eclipse正常启动是因为运行时依赖直接加载各个独立jar包的配置,不会出现文件覆盖问题,问题出在maven-assembly-plugin的打包逻辑上。

方案1:替换为Spring官方打包插件(推荐)

maven-assembly-plugin默认会直接合并同名文件,后续同路径的文件会覆盖之前的内容,无法正确处理Spring Boot多个依赖包中同名的spring.factories、spring.handlers等配置文件。官方提供的spring-boot-maven-plugin会自动处理这类配置合并,且生成的fat jar结构符合Spring Boot的启动规范。
配置示例如下,添加到pom.xml中:

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <version>匹配你的Spring Boot版本</version>
            <executions>
                <execution>
                    <goals>
                        <goal>repackage</goal>
                    </goals>
                    <configuration>
                        <!-- 指定你的启动类全限定名,比如com.xxx.Application -->
                        <mainClass>com.xxx.YourMainClass</mainClass>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

执行mvn clean package后,target目录生成的可执行jar即可直接用java -jar启动。

方案2:调整maven-assembly-plugin配置(必须用assembly插件时使用)

需要在assembly的描述文件中添加配置,对Spring相关的配置文件执行追加合并而非覆盖:

  1. 修改assembly的xml配置文件,添加如下文件合并规则:
<containerDescriptorHandlers>
    <containerDescriptorHandler>
        <handlerName>metaInf-services</handlerName>
    </containerDescriptorHandler>
    <containerDescriptorHandler>
        <handlerName>spring</handlerName>
    </containerDescriptorHandler>
</containerDescriptorHandlers>
  1. 重新执行mvn clean install生成fat jar即可。

额外检查项

  • 确认bat脚本中指定的jar路径为fat jar,而非不带依赖的普通jar,可以在bat中添加echo %你的jar路径变量%打印路径校验
  • 检查bat中JAVA_HOME对应的JDK版本和项目编译版本一致,避免版本不兼容导致的配置加载失败
  • 打包完成后可手动打开fat jar,检查META-INF/spring.factories文件中是否存在org.springframework.boot.autoconfigure.EnableAutoConfiguration相关配置条目

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 00:24:02