SpringBoot嵌入Minecraft插件打包后启动报错:找不到自动配置类
问题根源
这个报错的核心是打包后的Minecraft插件JAR里缺少SpringBoot自动配置必需的元数据文件——META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports。IDEA里直接跑主函数正常,是因为IDE会自动处理类路径和资源加载,但打包成MC插件JAR时,这些关键资源要么被遗漏,要么被打包插件的规则覆盖了。
解决办法
1. 修复ShadowJar的资源合并规则
如果你用ShadowJar打包插件,必须确保SpringBoot的META-INF资源被正确合并,而不是被过滤掉。在build.gradle里修改ShadowJar配置:
shadowJar { mergeServiceFiles() mergeManifest() // 强制包含SpringBoot自动配置的元数据目录 from(sourceSets.main.resources) { include 'META-INF/spring/**' } // 排除签名文件,避免合并冲突 exclude 'META-INF/*.SF', 'META-INF/*.DSA', 'META-INF/*.RSA' }
2. 检查依赖范围
别把SpringBoot的依赖设为provided或compileOnly,否则打包时不会把这些依赖打进JAR里。正确的依赖配置应该是:
dependencies { // SpringBoot核心依赖用implementation,确保打包时包含 implementation 'org.springframework.boot:spring-boot-starter' // Minecraft API依赖用compileOnly,因为服务器本身会提供 compileOnly 'org.spigotmc:spigot-api:1.20.1-R0.1-SNAPSHOT' }
3. 手动指定自动配置类(兜底方案)
如果自动扫描还是找不到配置类,可以直接在SpringBoot启动类里手动导入需要的自动配置类,绕过自动扫描:
@SpringBootApplication(scanBasePackages = "com.your.plugin.package") @ImportAutoConfiguration({ PropertyPlaceholderAutoConfiguration.class, WebMvcAutoConfiguration.class // 按需添加你需要的其他自动配置类 }) public class PluginSpringApp { // 在插件onEnable里调用这个方法初始化SpringBoot public static void init() { SpringApplication.run(PluginSpringApp.class); } }
4. 验证JAR内容
打包完后解压JAR,检查META-INF/spring目录下是否有org.springframework.boot.autoconfigure.AutoConfiguration.imports文件。如果没有,检查sourceSets配置,确保资源目录被正确识别:
sourceSets { main { resources { srcDirs = ['src/main/resources'] include '**/*' } } }
5. 避免打包插件冲突
不要同时用SpringBoot的spring-boot-gradle-plugin和ShadowJar,两者打包逻辑会冲突。如果需要用SpringBoot的功能,直接通过依赖引入,别用它的打包插件:
plugins { id 'java' id 'com.github.johnrengelman.shadow' version '8.1.1' // 注释掉这两个SpringBoot打包插件 // id 'org.springframework.boot' version '3.1.2' // id 'io.spring.dependency-management' version '1.1.2' }
额外提醒
- Minecraft插件的入口类(继承
JavaPlugin)要在onEnable()方法里调用SpringBoot的初始化方法,别用独立的主函数跑。 - 确保SpringBoot版本和MC服务器的Java版本兼容——比如MC 1.17+需要Java 16+,SpringBoot 3.x要求Java 17+。
内容的提问来源于stack exchange,提问作者Max
相关产品推荐
相关产品推荐

