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

非Spring Boot项目集成Paper插件时@ComponentScan未扫描到自定义Bean问题

问题根因与解决方案

核心原因

Minecraft Paper服务端的插件使用独立的插件类加载器加载,和Spring默认使用的系统类加载器不属于同一个层级,Spring默认的组件扫描逻辑无法识别到插件Jar包内的自定义类,导致@ComponentScan失效。

修复方案

修改Subserver类中Spring上下文的初始化逻辑,不要直接用带配置类参数的构造方法初始化,改为手动指定类加载器后再刷新上下文:

@SneakyThrows
@Override
public void onEnable() {
    // 1. 先创建空的注解配置上下文
    context = new AnnotationConfigApplicationContext();
    // 2. 手动指定类加载器为当前插件的类加载器,确保Spring能扫描到插件内的类
    context.setClassLoader(this.getClass().getClassLoader());
    // 3. 注册配置类
    context.register(BukkitSpringApplication.class);
    // 4. 手动刷新上下文完成初始化
    context.refresh();

    // 后续原有逻辑不变
    System.out.println(context.getBeanDefinitionCount());
    for (String beanName : context.getBeanDefinitionNames()) {
        System.out.println(beanName);
    }
    BukkitConfiguration bukkitConfiguration = context.getBean(BukkitConfiguration.class);
    bukkitConfiguration.startMinecraftPlugin(context, this);
    context.registerShutdownHook();
}

其他可排查项

  • 确认打包后的插件Jar内确实存在de.nebelniek.BukkitConfiguration类,避免打包过滤规则误删类文件
  • 确认@ComponentScan的包路径拼写完全正确,大小写与实际包结构一致
  • 确认自定义的Bean类上都正确添加了@Configuration/@Component/@Service等Spring托管注解

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 19:36:04