ChenLingCong_ 2023-09-19 22:40 采纳率: 0%
浏览 18
已结题

使用springboot开发minecraft插件

我是一个自学了一点Java的minecraft的玩家,问题说不定会很傻,希望各位不要介意,下面是我的问题


这是springboot的主类


@SpringBootApplication
public class Demo1Application {

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

}

这是Bukkit插件的启动类,没有main()方法,插件在游戏启动时调用onEnable(),关闭时调用onDisable()


public class MyPlugin extends JavaPlugin {

    @Override
    public void onEnable() {
        // Plugin startup logic
    }

    @Override
    public void onDisable() {
        // Plugin shutdown logic
    }

}

如何在Bukkit插件中使用springboot自动配置注解


将类MyPlugin作为springboot的主类,SpringApplication.run()放到onEnable()中


@SpringBootApplication
public class MyPlugin extends JavaPlugin {

    @Autowired
    UserinfoMapper userinfoMapper;

    @Override
    public void onEnable() {
        // Plugin startup logic
        SpringApplication.run(MyPlugin.class);

        Userinfo userinfo = userinfoMapper.selectById(4);
        getLogger().info(userinfo.toString());
    }

    @Override
    public void onDisable() {
        // Plugin shutdown logic
    }
}

依赖:
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.1.3</version>
    </parent>
    <dependencies>
        <dependency>
            <groupId>io.papermc.paper</groupId>
            <artifactId>paper-api</artifactId>
            <version>1.18.2-R0.1-SNAPSHOT</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.3.1</version>
        </dependency>
    </dependencies>

报错:
java.lang.IllegalArgumentException:
No auto configuration classes found in META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports.
If you are using a custom packaging, make sure that file is correct.

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-09-20 08:43
    关注

    【以下回答由 GPT 生成】

    首先,我了解到您想在Bukkit插件中使用Spring Boot的自动配置注解。实际上,这是一个有挑战性的问题,因为Bukkit插件的生命周期和加载机制与Spring Boot的工作方式不同。然而,我们可以通过一些变通的方式来实现这个目标。

    具体的解决方案如下:

    1. 创建一个新的普通的Spring Boot应用程序,其中包含您希望在Bukkit插件中使用的全部自动配置依赖项。您可以通过Maven或Gradle来管理这个项目。确保您的pom.xml或build.gradle文件中包含了spring-boot-starter-parent和其他必要的依赖项。

    2. 在您的Bukkit插件项目中,将主类MyPlugin作为一个普通的Java类进行修改,即不再继承JavaPlugin。您可以选择创建一个新的类,例如MyPluginMain,并将其中的逻辑复制到该类中。在onEnable()方法和onDisable()方法中,调用新建的MyPluginMain的相关方法。

    下面是修改后的MyPlugin类的示例代码:

    public class MyPlugin extends JavaPlugin {
    
        private MyPluginMain pluginMain;
    
        @Override
        public void onEnable() {
            // 初始化插件主类
            pluginMain = new MyPluginMain(this);
            pluginMain.onEnable();
        }
    
        @Override
        public void onDisable() {
            pluginMain.onDisable();
        }
    }
    
    1. 创建新的MyPluginMain类,并将原来MyPlugin类中的逻辑复制到该类中。在MyPluginMain类中,使用@Autowired注解注入所需的依赖项。

    下面是示例MyPluginMain类的代码:

    @SpringBootApplication
    public class MyPluginMain {
    
        private final JavaPlugin plugin;
    
        @Autowired
        private UserinfoMapper userinfoMapper;
    
        public MyPluginMain(JavaPlugin plugin) {
            this.plugin = plugin;
        }
    
        public void onEnable() {
            SpringApplication.run(MyPluginMain.class);
    
            Userinfo userinfo = userinfoMapper.selectById(4);
            plugin.getLogger().info(userinfo.toString());
        }
    
        public void onDisable() {
            // 停止Spring Boot应用程序
            SpringApplication.exit(SpringApplication.run(MyPluginMain.class));
        }
    }
    

    这样,您就可以在MyPluginMain类中使用Spring Boot的自动配置注解并进行相应的注入操作。

    请注意,由于Bukkit插件和Spring Boot应用程序具有不同的生命周期和加载机制,您可能需要进行一些额外的调整和处理,以确保插件与Spring Boot应用程序之间的协同工作。例如,您可能需要手动管理Spring Boot应用程序的启动和关闭,并处理依赖项的加载和处理顺序等。

    除此之外,还要注意避免在插件启动过程中阻塞主线程,否则可能会导致游戏锁定或其他问题。这是因为Spring Boot的启动本质上是阻塞的。

    总结一下,尽管在Bukkit插件中使用Spring Boot的自动配置注解是有一些挑战的,但通过将主类拆分为插件主类和Spring Boot主类,并进行一些额外的处理和调整,您还是可以实现该目标。这个解决方案可能需要更多的细节和调整,具体情况可能因您的插件和依赖项而异。希望以上解决方案对您有所帮助,如果您有任何问题,请随时提问。


    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 6月16日
  • 创建了问题 9月19日

悬赏问题

  • ¥18 光催化第一性原理计算析氢效率STH怎么计算
  • ¥100 Mac 版foxmail 收邮件问题
  • ¥15 QWebEngineView
  • ¥15 如何使用shufflenet进行手写数字识别
  • ¥15 .net core 同时编辑怎么防止数据串了
  • ¥20 微信小程序播放直播流
  • ¥15 关于迷宫自走单片机循迹小车的知识
  • ¥15 python使用selenium工具爬取网站的问题
  • ¥15 visual studio中c语言用ODBC链接SQL SERVER
  • ¥15 关于#python#的问题:如何通过pywinauto获取到图中“窗格”内部的内容