MiraiForum

    • Register
    • Login
    • Search
    • Popular
    • Recent
    • Unsolved
    • Tags
    • Groups
    • 友情链接

    Solved 插件运行时reflections框架无法扫描到带有对应注解的类

    开发交流
    2
    3
    287
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • P
      pqwoeiruty last edited by pqwoeiruty

      工程是idea里mirai console插件里自带的java工程模板

      jdk版本:openjdk 17

      问题代码:

      Class CommandMap{
      
          public CommandMap(boolean scan) {
                 if (scan) this.scan();
          }
      
          private void scan() {
                 Reflections reflector = new Reflections("com.example");
                 Set<Class<?>> classes = reflector.getTypesAnnotatedWith(Command.class);
          }
      }
      

      调用(测试)均通过以下方式调用:

      CommandMap cm=new CommandMap(true);
      

      问题描述:使用项目模板自带的运行配置运行,reflections框架无法扫描到带有对应注解的类,使用junit运行测试代码可以扫描到对应的类。
      直接运行代码,classes的size为0,没有扫描到类
      捕获.PNG
      使用junit运行测试代码,classes的size为1,成功扫描到了一个类
      捕获1.PNG

      1 Reply Last reply Reply Quote 0
      • cssxsh
        cssxsh last edited by

        实际在 mirai-console 运行时, 插件不会直接加载到 AppClassLoader, 而是有独立的类加载器,以保证类隔离不相互影响
        你需要给 Reflections 添加 当前插件的类加载器作为 扫描目标

        P 1 Reply Last reply Reply Quote 0
        • P
          pqwoeiruty @cssxsh last edited by pqwoeiruty

          解决了,在创建变量的时候直接传入pluginloader的classloader即可,代码如下

          //变量在插件主类中创建
          Reflections reflector=new Reflections("包名路径",getLoader().getClassLoaders().toArray());
          
          1 Reply Last reply Reply Quote 0
          • Topic has been marked as solved  P pqwoeiruty 
          • 1 / 1
          • First post
            Last post
          Powered by Mamoe Technologies & NodeBB | 友情链接 | 服务监控 | Contact