Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么pluginManager.getExtensions的结果为空?_Java_Pf4j - Fatal编程技术网

Java 为什么pluginManager.getExtensions的结果为空?

Java 为什么pluginManager.getExtensions的结果为空?,java,pf4j,Java,Pf4j,在尝试使用PF4J时,我创建了中概述的必要零件 扩展扩展点的接口 插件 装有舱单的罐子 插件加载和激活 为什么ClickHandler列表为空? 我已经通过JUnit测试对此进行了测试,在那里我可以调试其他似乎工作正常的部分。请参阅下面的调试日志 我还研究并激活了Eclipse注释处理,但没有产生任何积极影响 1。扩展扩展点的接口 unzip -q -c target/com.bitplan.mb-0.0.1.jar META-INF/MANIFEST.MF Manifest-Version:

在尝试使用PF4J时,我创建了中概述的必要零件

  • 扩展扩展点的接口
  • 插件
  • 装有舱单的罐子
  • 插件加载和激活
  • 为什么ClickHandler列表为空?

    我已经通过JUnit测试对此进行了测试,在那里我可以调试其他似乎工作正常的部分。请参阅下面的调试日志

    我还研究并激活了Eclipse注释处理,但没有产生任何积极影响

    1。扩展扩展点的接口

    unzip -q -c target/com.bitplan.mb-0.0.1.jar META-INF/MANIFEST.MF
    Manifest-Version: 1.0
    Plugin-Dependencies: 
    Plugin-Id: com.bitplan.mb
    Built-By: wf
    Plugin-Provider: BITPlan GmbH
    Plugin-Version: 0.0.1
    Plugin-Class: com.bitplan.mb.MBClickHandlerPlugin
    Created-By: Apache Maven 3.5.2
    Build-Jdk: 1.8.0_152
    
    公共界面ClickHandler扩展扩展扩展点{
    ...
    }
    
    2。插件

    public类MBClickHandlerPlugin扩展插件{
    /**
    *构造我
    *@param包装器
    */
    公共MBClickHandlerPlugin(插件包装器){
    超级包装机;
    }
    @延伸
    公共静态类MBClickHandler实现ClickHandler{
    }
    }
    
    3。带有清单的Jar

    unzip -q -c target/com.bitplan.mb-0.0.1.jar META-INF/MANIFEST.MF
    Manifest-Version: 1.0
    Plugin-Dependencies: 
    Plugin-Id: com.bitplan.mb
    Built-By: wf
    Plugin-Provider: BITPlan GmbH
    Plugin-Version: 0.0.1
    Plugin-Class: com.bitplan.mb.MBClickHandlerPlugin
    Created-By: Apache Maven 3.5.2
    Build-Jdk: 1.8.0_152
    
    4。插件加载和激活

    /**
    *激活命令行上请求的插件
    */
    公共void activatePlugins(){
    pluginManager=newdefaultpluginmanager();
    for(字符串插件:插件){
    路径pluginPath=Path.get(plugin);
    pluginManager.loadPlugin(pluginPath);
    }
    pluginManager.startPlugins();
    列表clickHandlers=pluginManager
    .getExtensions(ClickHandler.class);
    对于(ClickHandler ClickHandler:ClickHandler){
    安装clickHandler(clickHandler);
    }
    }
    
    调试日志

    22 [main] DEBUG org.pf4j.CompoundPluginDescriptorFinder  - Try to continue with the next finder
    22 [main] DEBUG org.pf4j.CompoundPluginDescriptorFinder  - 'org.pf4j.ManifestPluginDescriptorFinder@73d4cc9e' is applicable for plugin '/Users/wf/Documents/workspace/com.bitplan.mb/target/com.bitplan.mb-0.0.1.jar'
    24 [main] DEBUG org.pf4j.AbstractPluginManager  - Found descriptor PluginDescriptor [pluginId=com.bitplan.mb, pluginClass=com.bitplan.mb.MBClickHandlerPlugin, version=0.0.1, provider=BITPlan GmbH, dependencies=[], description=, requires=*, license=null]
    24 [main] DEBUG org.pf4j.AbstractPluginManager  - Class 'com.bitplan.mb.MBClickHandlerPlugin' for plugin '/Users/wf/Documents/workspace/com.bitplan.mb/target/com.bitplan.mb-0.0.1.jar'
    24 [main] DEBUG org.pf4j.AbstractPluginManager  - Loading plugin '/Users/wf/Documents/workspace/com.bitplan.mb/target/com.bitplan.mb-0.0.1.jar'
    24 [main] DEBUG org.pf4j.CompoundPluginLoader  - 'org.pf4j.DefaultPluginLoader@6366ebe0' is not applicable for plugin '/Users/wf/Documents/workspace/com.bitplan.mb/target/com.bitplan.mb-0.0.1.jar'
    24 [main] DEBUG org.pf4j.CompoundPluginLoader  - 'org.pf4j.JarPluginLoader@44f75083' is applicable for plugin '/Users/wf/Documents/workspace/com.bitplan.mb/target/com.bitplan.mb-0.0.1.jar'
    25 [main] DEBUG org.pf4j.PluginClassLoader  - Add 'file:/Users/wf/Documents/workspace/com.bitplan.mb/target/com.bitplan.mb-0.0.1.jar'
    25 [main] DEBUG org.pf4j.AbstractPluginManager  - Loaded plugin '/Users/wf/Documents/workspace/com.bitplan.mb/target/com.bitplan.mb-0.0.1.jar' with class loader 'org.pf4j.PluginClassLoader@43d7741f'
    25 [main] DEBUG org.pf4j.AbstractPluginManager  - Creating wrapper for plugin '/Users/wf/Documents/workspace/com.bitplan.mb/target/com.bitplan.mb-0.0.1.jar'
    25 [main] DEBUG org.pf4j.AbstractPluginManager  - Created wrapper 'PluginWrapper [descriptor=PluginDescriptor [pluginId=com.bitplan.mb, pluginClass=com.bitplan.mb.MBClickHandlerPlugin, version=0.0.1, provider=BITPlan GmbH, dependencies=[], description=, requires=*, license=null], pluginPath=/Users/wf/Documents/workspace/com.bitplan.mb/target/com.bitplan.mb-0.0.1.jar]' for plugin '/Users/wf/Documents/workspace/com.bitplan.mb/target/com.bitplan.mb-0.0.1.jar'
    26 [main] DEBUG org.pf4j.DependencyResolver  - Graph: 
       com.bitplan.mb -> []
    26 [main] DEBUG org.pf4j.DependencyResolver  - Plugins order: [com.bitplan.mb]
    27 [main] INFO org.pf4j.AbstractPluginManager  - Plugin 'com.bitplan.mb@0.0.1' resolved
    27 [main] INFO org.pf4j.AbstractPluginManager  - Start plugin 'com.bitplan.mb@0.0.1'
    27 [main] DEBUG org.pf4j.DefaultPluginFactory  - Create instance for plugin 'com.bitplan.mb.MBClickHandlerPlugin'
    28 [main] DEBUG org.pf4j.AbstractExtensionFinder  - Finding extensions of extension point 'com.bitplan.uml2mxgraph.ClickHandler'
    28 [main] DEBUG org.pf4j.LegacyExtensionFinder  - Reading extensions storages from classpath
    28 [main] DEBUG org.pf4j.AbstractExtensionFinder  - No extensions found
    28 [main] DEBUG org.pf4j.LegacyExtensionFinder  - Reading extensions storages from plugins
    28 [main] DEBUG org.pf4j.LegacyExtensionFinder  - Reading extensions storage from plugin 'com.bitplan.mb'
    28 [main] DEBUG org.pf4j.LegacyExtensionFinder  - Cannot find 'META-INF/extensions.idx'
    28 [main] DEBUG org.pf4j.AbstractExtensionFinder  - No extensions found
    28 [main] DEBUG org.pf4j.AbstractExtensionFinder  - Finding extensions of extension point 'com.bitplan.uml2mxgraph.ClickHandler' for plugin 'null'
    28 [main] DEBUG org.pf4j.AbstractExtensionFinder  - Finding extensions of extension point 'com.bitplan.uml2mxgraph.ClickHandler' for plugin 'com.bitplan.mb'
    29 [main] DEBUG org.pf4j.AbstractExtensionFinder  - Found 0 extensions for extension point 'com.bitplan.uml2mxgraph.ClickHandler
    

    解决方案1

    使用定制的PluginManager

    pluginManager = new JarPluginManager(this.getClass().getClassLoader());
    
    从将使用插件以确保使用相同类加载器的类

    JarPluginManager源代码:

    解决办法#2 如果未创建extensions.idx文件,则说明批注处理有问题。您可能希望修复问题的根源,但也可以尝试解决它:

    • 指给我手动创建META-INF/extensions.idx文件,并确保静态内部类没有args构造函数有了这些变化,一切都会顺利进行。

    • 注意在extensions.idx中正确设置类名 文件-否则,处理程序列表中的条目将为空

    • 注意使用空参数构造函数,否则将以异常结束

    @扩展名
    公共静态类MBClickHandler实现ClickHandler{
    /**
    *无参数构造函数
    */
    公共MBClickHandler(){
    }
    
    src/main/resources/META-INF/extensions.idx

    com.bitplan.mb.MBClickHandlerPlugin$MBClickHandler
    
    要检查的代码

  • extension.idx条目的正确名称
  • MBClickHandler ch=new MBClickHandler();
    File extFile=new文件(“src/main/resources/META-INF/extensions.idx”);
    字符串extidx=FileUtils.readFileToString(extFile,“UTF-8”);
    assertEquals(extidx,ch.getClass().getName());
    
  • 检查扩展
  • List startedPlugins=pluginManager.getStartedPlugins();
    for(PluginWrapper插件:startedPlugins){
    字符串pluginId=plugin.getDescriptor().getPluginId();
    System.out.println(String.format(“插件'%s':”,pluginId添加的扩展”);
    设置extensionClassNames=pluginManager.getExtensionClassNames(pluginId);
    for(字符串扩展名:extensionClassNames){
    System.out.println(“+”扩展名);
    }
    }
    
    另请参见问题