MiraiForum

    • 注册
    • 登录
    • 搜索
    • 热门
    • 最新
    • 未解决
    • 标签
    • 群组
    • 友情链接

    使用Quartz依赖不能启动Mirai

    BUG反馈
    3
    9
    685
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • LingerJAB
      LingerJAB 最后由 编辑

      使用了该依赖无法启动
      implementation 'org.quartz-scheduler:quartz:2.3.2'
      报错没找到类,但我IDEA下jar外部包都能找到,而且引用没有问题

      
      2023-12-07 01:19:44 E/main: Failed to init MiraiConsole.
      net.mamoe.mirai.console.internal.util.ServiceLoadException: Could not load service com.mirai.MiraiBot.
      	at net.mamoe.mirai.console.internal.util.PluginServiceHelper.loadService(PluginServiceHelper.kt:60)
      	at net.mamoe.mirai.console.internal.util.PluginServiceHelper.loadAllServices(PluginServiceHelper.kt:42)
      	at net.mamoe.mirai.console.internal.plugin.BuiltInJvmPluginLoaderImpl$extractPlugins$findAllInstances$2.invoke(BuiltInJvmPluginLoaderImpl.kt:170)
      	at net.mamoe.mirai.console.internal.plugin.BuiltInJvmPluginLoaderImpl$extractPlugins$findAllInstances$2.invoke(BuiltInJvmPluginLoaderImpl.kt:165)
      	at kotlin.sequences.TransformingSequence$iterator$1.next(Sequences.kt:210)
      	at kotlin.sequences.FlatteningSequence$iterator$1.ensureItemIterator(Sequences.kt:314)
      	at kotlin.sequences.FlatteningSequence$iterator$1.hasNext(Sequences.kt:303)
      	at kotlin.sequences.TransformingSequence$iterator$1.hasNext(Sequences.kt:214)
      	at kotlin.sequences.TransformingSequence$iterator$1.hasNext(Sequences.kt:214)
      	at kotlin.sequences.FlatteningSequence$iterator$1.ensureItemIterator(Sequences.kt:316)
      	at kotlin.sequences.FlatteningSequence$iterator$1.hasNext(Sequences.kt:303)
      	at kotlin.sequences.SequencesKt___SequencesKt.toCollection(_Sequences.kt:786)
      	at kotlin.sequences.SequencesKt___SequencesKt.toSet(_Sequences.kt:827)
      	at net.mamoe.mirai.console.internal.plugin.BuiltInJvmPluginLoaderImpl.extractPlugins(BuiltInJvmPluginLoaderImpl.kt:191)
      	at net.mamoe.mirai.console.internal.plugin.BuiltInJvmPluginLoaderImpl.listPlugins(BuiltInJvmPluginLoaderImpl.kt:66)
      	at net.mamoe.mirai.console.plugin.jvm.JvmPluginLoader$BuiltIn.listPlugins(JvmPluginLoader.kt)
      	at net.mamoe.mirai.console.internal.plugin.PluginManagerImpl.listAndSortAllPlugins(PluginManagerImpl.kt:192)
      	at net.mamoe.mirai.console.internal.plugin.PluginManagerImpl.findAndSortAllPluginsUsingBuiltInLoaders(PluginManagerImpl.kt:138)
      	at net.mamoe.mirai.console.internal.plugin.PluginManagerImpl.loadAllPluginsUsingBuiltInLoaders$mirai_console(PluginManagerImpl.kt:148)
      	at net.mamoe.mirai.console.internal.MiraiConsoleImplementationBridge.doStart$mirai_console(MiraiConsoleImplementationBridge.kt:178)
      	at net.mamoe.mirai.console.MiraiConsoleImplementation$Companion.start(MiraiConsoleImplementation.kt:464)
      	at net.mamoe.mirai.console.terminal.MiraiConsoleTerminalLoader.startAsDaemon(MiraiConsoleTerminalLoader.kt:168)
      	at net.mamoe.mirai.console.terminal.MiraiConsoleTerminalLoader.startAsDaemon$default(MiraiConsoleTerminalLoader.kt:167)
      	at net.mamoe.mirai.console.terminal.MiraiConsoleTerminalLoader.main(MiraiConsoleTerminalLoader.kt:52)
      Caused by: java.lang.NoClassDefFoundError: org/quartz/SchedulerException
      	at java.base/java.lang.Class.forName0(Native Method)
      	at java.base/java.lang.Class.forName(Class.java:488)
      	at java.base/java.lang.Class.forName(Class.java:467)
      	at net.mamoe.mirai.console.internal.util.PluginServiceHelper.loadService(PluginServiceHelper.kt:51)
      	... 23 more
      Caused by: java.lang.NoClassDefFoundError: org/quartz/SchedulerException
      
      Caused by: java.lang.ClassNotFoundException: org.quartz.SchedulerException
      	at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
      	at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
      	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
      	at net.mamoe.mirai.console.internal.plugin.JvmPluginClassLoaderN.loadClass(JvmPluginClassLoader.kt:389)
      	... 27 more
      
      Caused by: java.lang.ClassNotFoundException: org.quartz.SchedulerException
      
      1 条回复 最后回复 回复 引用 0
      • cssxsh
        cssxsh 最后由 编辑

        https://github.com/mamoe/mirai/blob/dev/mirai-console/docs/plugin/JVMPlugin-Debug.md#使用的第三方库报错没有模块实现

        LingerJAB 2 条回复 最后回复 回复 引用 0
        • LingerJAB
          LingerJAB @cssxsh 最后由 LingerJAB 编辑

          @cssxsh 5d6357b1-a9a1-4e46-b642-fe1049f56660-image.png 未能解决,请问这里的类加载器的插件不是当前使用的Bot吗(我这里是MiraiBot extends JavaPlugin),使用JavaPlugin.class也能没能解决

          现在不清楚是解决方案的那一步出了问题
          这里是报错信息

          2023-12-08 00:23:42 E/main: Failed to init MiraiConsole.
          net.mamoe.mirai.console.internal.util.ServiceLoadException: Could not load service com.mirai.MiraiBot.
          	at net.mamoe.mirai.console.internal.util.PluginServiceHelper.loadService(PluginServiceHelper.kt:60)
          	at net.mamoe.mirai.console.internal.util.PluginServiceHelper.loadAllServices(PluginServiceHelper.kt:42)
          	at net.mamoe.mirai.console.internal.plugin.BuiltInJvmPluginLoaderImpl$extractPlugins$findAllInstances$2.invoke(BuiltInJvmPluginLoaderImpl.kt:170)
          	at net.mamoe.mirai.console.internal.plugin.BuiltInJvmPluginLoaderImpl$extractPlugins$findAllInstances$2.invoke(BuiltInJvmPluginLoaderImpl.kt:165)
          	at kotlin.sequences.TransformingSequence$iterator$1.next(Sequences.kt:210)
          	at kotlin.sequences.FlatteningSequence$iterator$1.ensureItemIterator(Sequences.kt:314)
          	at kotlin.sequences.FlatteningSequence$iterator$1.hasNext(Sequences.kt:303)
          	at kotlin.sequences.TransformingSequence$iterator$1.hasNext(Sequences.kt:214)
          	at kotlin.sequences.TransformingSequence$iterator$1.hasNext(Sequences.kt:214)
          	at kotlin.sequences.FlatteningSequence$iterator$1.ensureItemIterator(Sequences.kt:316)
          	at kotlin.sequences.FlatteningSequence$iterator$1.hasNext(Sequences.kt:303)
          	at kotlin.sequences.SequencesKt___SequencesKt.toCollection(_Sequences.kt:786)
          	at kotlin.sequences.SequencesKt___SequencesKt.toSet(_Sequences.kt:827)
          	at net.mamoe.mirai.console.internal.plugin.BuiltInJvmPluginLoaderImpl.extractPlugins(BuiltInJvmPluginLoaderImpl.kt:191)
          	at net.mamoe.mirai.console.internal.plugin.BuiltInJvmPluginLoaderImpl.listPlugins(BuiltInJvmPluginLoaderImpl.kt:66)
          	at net.mamoe.mirai.console.plugin.jvm.JvmPluginLoader$BuiltIn.listPlugins(JvmPluginLoader.kt)
          	at net.mamoe.mirai.console.internal.plugin.PluginManagerImpl.listAndSortAllPlugins(PluginManagerImpl.kt:192)
          	at net.mamoe.mirai.console.internal.plugin.PluginManagerImpl.findAndSortAllPluginsUsingBuiltInLoaders(PluginManagerImpl.kt:138)
          	at net.mamoe.mirai.console.internal.plugin.PluginManagerImpl.loadAllPluginsUsingBuiltInLoaders$mirai_console(PluginManagerImpl.kt:148)
          	at net.mamoe.mirai.console.internal.MiraiConsoleImplementationBridge.doStart$mirai_console(MiraiConsoleImplementationBridge.kt:178)
          	at net.mamoe.mirai.console.MiraiConsoleImplementation$Companion.start(MiraiConsoleImplementation.kt:464)
          	at net.mamoe.mirai.console.terminal.MiraiConsoleTerminalLoader.startAsDaemon(MiraiConsoleTerminalLoader.kt:168)
          	at net.mamoe.mirai.console.terminal.MiraiConsoleTerminalLoader.startAsDaemon$default(MiraiConsoleTerminalLoader.kt:167)
          	at net.mamoe.mirai.console.terminal.MiraiConsoleTerminalLoader.main(MiraiConsoleTerminalLoader.kt:52)
          Caused by: java.lang.NoClassDefFoundError: org/quartz/SchedulerException
          	at java.base/java.lang.Class.forName0(Native Method)
          	at java.base/java.lang.Class.forName(Class.java:467)
          	at net.mamoe.mirai.console.internal.util.PluginServiceHelper.loadService(PluginServiceHelper.kt:51)
          Caused by: java.lang.NoClassDefFoundError: org/quartz/SchedulerException
          
          	... 23 more
          Caused by: java.lang.ClassNotFoundException: org.quartz.SchedulerException
          	at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
          	at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
          Caused by: java.lang.ClassNotFoundException: org.quartz.SchedulerException
          
          	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520)
          	at net.mamoe.mirai.console.internal.plugin.JvmPluginClassLoaderN.loadClass(JvmPluginClassLoader.kt:389)
          	... 26 more
          
          1 条回复 最后回复 回复 引用 0
          • LingerJAB
            LingerJAB @cssxsh 最后由 LingerJAB 编辑

            @cssxsh 这两次的报错是一样的...
            此外我在debug时发现并没有执行更换类加载器的代码,不知道是不是真的只是quartz库的问题(可是我明明gradle依赖了呀💦💦)

            1 条回复 最后回复 回复 引用 0
            • cssxsh
              cssxsh 最后由 编辑

              你应该贴出全部代码
              另外 try catch 里的(异常)类信息是提前加载的

              LingerJAB 1 条回复 最后回复 回复 引用 0
              • LingerJAB
                LingerJAB @cssxsh 最后由 编辑

                @cssxsh 我的机器人主程序 MiraiBot.java:

                import ...
                
                public final class MiraiBot extends JavaPlugin {
                    public static final MiraiBot INSTANCE = new MiraiBot();
                
                    private MiraiBot() {
                        super(new JvmPluginDescriptionBuilder("com.mirai.lin", "0.1.0")
                                .name("MiraiBot")
                                .author("Lin")
                                .build());
                    }
                
                    @Override
                    public void onEnable() {
                        // 就像下面这样
                        ClassLoader old = Thread.currentThread().getContextClassLoader();
                        try {
                            Thread.currentThread().setContextClassLoader(Bootstrap.class.getClassLoader());
                            // Service loading.
                
                            getLogger().info("Plugin loaded!");
                            EventChannel<Event> channel = GlobalEventChannel.INSTANCE
                                    .parentScope(MiraiBot.INSTANCE)
                                    .context(this.getCoroutineContext());
                
                            // 加载 DcConfig
                            MainHandler.loadTokens();
                
                            // Token刷新器
                            autoRefreshToken();
                
                            // 监听器
                            channel.subscribeAlways(MessageEvent.class, MainHandler::eventCenter);
                
                        } finally {
                            Thread.currentThread().setContextClassLoader(old);
                        }
                    }
                
                    // 自动刷新Token
                    public void autoRefreshToken() {
                            Scheduler scheduler;
                            try {
                                scheduler = new StdSchedulerFactory().getScheduler();
                            } catch(SchedulerException e) {
                                throw new RuntimeException(e);
                            }
                            JobDetail jobDetail = JobBuilder.newJob(RefreshTokenJob.class).build();
                            Trigger trigger = TriggerBuilder.newTrigger().startNow().withSchedule(SimpleScheduleBuilder.repeatSecondlyForever(30)).build();
                            try {
                                scheduler.scheduleJob(jobDetail, trigger);
                                scheduler.start();
                            } catch(SchedulerException e) {
                                throw new RuntimeException(e);
                            }
                
                    @Deprecated
                    public void refreshTokensTimer(){...}
                }
                1 条回复 最后回复 回复 引用 0
                • Karlatemp
                  Karlatemp 最后由 编辑

                  这是类似 clinit 使用依赖库, mirai 2.16.0 才开始支持在 clinit 阶段使用外部依赖库,并且需要在 clinit 阶段使用必须使用 plugin.yml 定义插件信息

                  LingerJAB 1 条回复 最后回复 回复 引用 0
                  • Karlatemp
                    Karlatemp 最后由 编辑

                    https://github.com/mamoe/mirai/blob/dev/mirai-console/docs/plugin/JVMPlugin-Debug.md#使用依赖库后无法加载插件--clinit-无法使用依赖库

                    1 条回复 最后回复 回复 引用 0
                    • LingerJAB
                      LingerJAB @Karlatemp 最后由 编辑

                      @Karlatemp 3651abfd16dcd08c4440179d09747e20.png 为什么build了还是不通过呢

                      1 条回复 最后回复 回复 引用 0
                      • 1 / 1
                      • First post
                        Last post
                      Powered by Mamoe Technologies & NodeBB | 友情链接 | 服务监控 | Contact