Why is the result of pluginManager.getExtensions empty?










0















When trying to use PF4J i created the necessary parts as outlined in



https://github.com/pf4j/pf4j



  1. an Interface that extends the ExtensionPoint

  2. a Plugin

  3. Jar with Manifest

  4. Plugin load and activation

Why is the List of clickHandlers empty?



I have tested this with a JUnit test where I can debug the other parts which seem to work fine. See debug log below.



I have also looked at https://github.com/pf4j/pf4j/issues/21 and activated the Eclipse annotation processing with no positive effect.



1. Interface that extends the Extension Point



public interface ClickHandler extends ExtensionPoint 
...




2. a Plugin



public class MBClickHandlerPlugin extends Plugin 

/**
* construct me
* @param wrapper
*/
public MBClickHandlerPlugin(PluginWrapper wrapper)
super(wrapper);


@Extension
public static class MBClickHandler implements ClickHandler






3. Jar with Manifest



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. Plugin load and activation



 /**
* activate the plugins requested on the command line
*/
public void activatePlugins()
pluginManager = new DefaultPluginManager();

for (String plugin : plugins)
Path pluginPath = Paths.get(plugin);
pluginManager.loadPlugin(pluginPath);

pluginManager.startPlugins();

List<ClickHandler> clickHandlers = pluginManager
.getExtensions(ClickHandler.class);
for (ClickHandler clickHandler : clickHandlers)
installClickHandler(clickHandler);




Debug log



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


'










share|improve this question
























  • See also Issue github.com/pf4j/pf4j/issues/249

    – Wolfgang Fahl
    Nov 13 '18 at 11:55















0















When trying to use PF4J i created the necessary parts as outlined in



https://github.com/pf4j/pf4j



  1. an Interface that extends the ExtensionPoint

  2. a Plugin

  3. Jar with Manifest

  4. Plugin load and activation

Why is the List of clickHandlers empty?



I have tested this with a JUnit test where I can debug the other parts which seem to work fine. See debug log below.



I have also looked at https://github.com/pf4j/pf4j/issues/21 and activated the Eclipse annotation processing with no positive effect.



1. Interface that extends the Extension Point



public interface ClickHandler extends ExtensionPoint 
...




2. a Plugin



public class MBClickHandlerPlugin extends Plugin 

/**
* construct me
* @param wrapper
*/
public MBClickHandlerPlugin(PluginWrapper wrapper)
super(wrapper);


@Extension
public static class MBClickHandler implements ClickHandler






3. Jar with Manifest



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. Plugin load and activation



 /**
* activate the plugins requested on the command line
*/
public void activatePlugins()
pluginManager = new DefaultPluginManager();

for (String plugin : plugins)
Path pluginPath = Paths.get(plugin);
pluginManager.loadPlugin(pluginPath);

pluginManager.startPlugins();

List<ClickHandler> clickHandlers = pluginManager
.getExtensions(ClickHandler.class);
for (ClickHandler clickHandler : clickHandlers)
installClickHandler(clickHandler);




Debug log



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


'










share|improve this question
























  • See also Issue github.com/pf4j/pf4j/issues/249

    – Wolfgang Fahl
    Nov 13 '18 at 11:55













0












0








0








When trying to use PF4J i created the necessary parts as outlined in



https://github.com/pf4j/pf4j



  1. an Interface that extends the ExtensionPoint

  2. a Plugin

  3. Jar with Manifest

  4. Plugin load and activation

Why is the List of clickHandlers empty?



I have tested this with a JUnit test where I can debug the other parts which seem to work fine. See debug log below.



I have also looked at https://github.com/pf4j/pf4j/issues/21 and activated the Eclipse annotation processing with no positive effect.



1. Interface that extends the Extension Point



public interface ClickHandler extends ExtensionPoint 
...




2. a Plugin



public class MBClickHandlerPlugin extends Plugin 

/**
* construct me
* @param wrapper
*/
public MBClickHandlerPlugin(PluginWrapper wrapper)
super(wrapper);


@Extension
public static class MBClickHandler implements ClickHandler






3. Jar with Manifest



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. Plugin load and activation



 /**
* activate the plugins requested on the command line
*/
public void activatePlugins()
pluginManager = new DefaultPluginManager();

for (String plugin : plugins)
Path pluginPath = Paths.get(plugin);
pluginManager.loadPlugin(pluginPath);

pluginManager.startPlugins();

List<ClickHandler> clickHandlers = pluginManager
.getExtensions(ClickHandler.class);
for (ClickHandler clickHandler : clickHandlers)
installClickHandler(clickHandler);




Debug log



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


'










share|improve this question
















When trying to use PF4J i created the necessary parts as outlined in



https://github.com/pf4j/pf4j



  1. an Interface that extends the ExtensionPoint

  2. a Plugin

  3. Jar with Manifest

  4. Plugin load and activation

Why is the List of clickHandlers empty?



I have tested this with a JUnit test where I can debug the other parts which seem to work fine. See debug log below.



I have also looked at https://github.com/pf4j/pf4j/issues/21 and activated the Eclipse annotation processing with no positive effect.



1. Interface that extends the Extension Point



public interface ClickHandler extends ExtensionPoint 
...




2. a Plugin



public class MBClickHandlerPlugin extends Plugin 

/**
* construct me
* @param wrapper
*/
public MBClickHandlerPlugin(PluginWrapper wrapper)
super(wrapper);


@Extension
public static class MBClickHandler implements ClickHandler






3. Jar with Manifest



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. Plugin load and activation



 /**
* activate the plugins requested on the command line
*/
public void activatePlugins()
pluginManager = new DefaultPluginManager();

for (String plugin : plugins)
Path pluginPath = Paths.get(plugin);
pluginManager.loadPlugin(pluginPath);

pluginManager.startPlugins();

List<ClickHandler> clickHandlers = pluginManager
.getExtensions(ClickHandler.class);
for (ClickHandler clickHandler : clickHandlers)
installClickHandler(clickHandler);




Debug log



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


'







java pf4j






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Nov 13 '18 at 12:16







Wolfgang Fahl

















asked Nov 13 '18 at 11:54









Wolfgang FahlWolfgang Fahl

6,51064496




6,51064496












  • See also Issue github.com/pf4j/pf4j/issues/249

    – Wolfgang Fahl
    Nov 13 '18 at 11:55

















  • See also Issue github.com/pf4j/pf4j/issues/249

    – Wolfgang Fahl
    Nov 13 '18 at 11:55
















See also Issue github.com/pf4j/pf4j/issues/249

– Wolfgang Fahl
Nov 13 '18 at 11:55





See also Issue github.com/pf4j/pf4j/issues/249

– Wolfgang Fahl
Nov 13 '18 at 11:55












1 Answer
1






active

oldest

votes


















0














Workaround #1



use a customized PluginManager



pluginManager = new JarPluginManager(this.getClass().getClassLoader());


from the class that will use the plugin to make sure the same classloader is used



JarPluginManager source code:



import java.nio.file.Path;

import org.pf4j.DefaultPluginManager;
import org.pf4j.JarPluginLoader;
import org.pf4j.ManifestPluginDescriptorFinder;
import org.pf4j.PluginClassLoader;
import org.pf4j.PluginDescriptor;
import org.pf4j.PluginDescriptorFinder;
import org.pf4j.PluginLoader;
import org.pf4j.PluginManager;

/**
* see https://github.com/pf4j/pf4j/issues/249 see
* https://pf4j.org/doc/class-loading.html
*
* @author wf
*
*/
public class JarPluginManager extends DefaultPluginManager
public static class ParentClassLoaderJarPluginLoader extends JarPluginLoader
static ClassLoader parentClassLoader;

/**
*
* @param pluginManager
*/
public ParentClassLoaderJarPluginLoader(PluginManager pluginManager)
super(pluginManager);


static PluginClassLoader pluginClassLoader;

@Override
public ClassLoader loadPlugin(Path pluginPath,
PluginDescriptor pluginDescriptor)
if (pluginClassLoader == null)
boolean parentFirst=true;
pluginClassLoader = new PluginClassLoader(pluginManager,
pluginDescriptor, parentClassLoader,parentFirst);

pluginClassLoader.addFile(pluginPath.toFile());

return pluginClassLoader;



/**
* construct me with the given classloader
* @param classLoader
*/
public JarPluginManager(ClassLoader classLoader)
ParentClassLoaderJarPluginLoader.parentClassLoader=classLoader;
//System.setProperty("pf4j.mode", RuntimeMode.DEPLOYMENT.toString());
//System.setProperty("pf4j.mode", RuntimeMode.DEVELOPMENT.toString());


@Override
protected PluginLoader createPluginLoader()
// load only jar plugins
return new ParentClassLoaderJarPluginLoader(this);


@Override
protected PluginDescriptorFinder createPluginDescriptorFinder()
// read plugin descriptor from jar's manifest
return new ManifestPluginDescriptorFinder();





Workaround #2
If the extensions.idx file is not created there is something wrong with your annotation processing. You might want to fix the source of the problem but it is also possible to try to work around it:



  • https://groups.google.com/forum/#!topic/pf4j/nn20axJHpfI
    pointed me to creating the META-INF/extensions.idx file manually and making sure there is a no args constructor for the static inner class. With this change things work.


  • Watch out for setting the classname correctly in the extensions.idx
    file - otherwise you'll end up with a null entry in the handler list


  • Watch out for having a null argument constructor otherwise you'll endup with an exception


@Extension
public static class MBClickHandler implements ClickHandler {
/**
* constructor with no argument
*/
public MBClickHandler()




src/main/resources/META-INF/extensions.idx



com.bitplan.mb.MBClickHandlerPlugin$MBClickHandler


Code to check



  1. Correct name for extension.idx entry

MBClickHandler ch=new MBClickHandler();
File extFile=new File("src/main/resources/META-INF/extensions.idx");
String extidx=FileUtils.readFileToString(extFile,"UTF-8");
assertEquals(extidx,ch.getClass().getName());



  1. checking the extensions

List<PluginWrapper> startedPlugins = pluginManager.getStartedPlugins();

for (PluginWrapper plugin : startedPlugins)
String pluginId = plugin.getDescriptor().getPluginId();
System.out.println(String.format("Extensions added by plugin '%s':", pluginId));
Set<String> extensionClassNames = pluginManager.getExtensionClassNames(pluginId);
for (String extension : extensionClassNames)
System.out.println(" " + extension);







share|improve this answer
























    Your Answer






    StackExchange.ifUsing("editor", function ()
    StackExchange.using("externalEditor", function ()
    StackExchange.using("snippets", function ()
    StackExchange.snippets.init();
    );
    );
    , "code-snippets");

    StackExchange.ready(function()
    var channelOptions =
    tags: "".split(" "),
    id: "1"
    ;
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function()
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled)
    StackExchange.using("snippets", function()
    createEditor();
    );

    else
    createEditor();

    );

    function createEditor()
    StackExchange.prepareEditor(
    heartbeatType: 'answer',
    autoActivateHeartbeat: false,
    convertImagesToLinks: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    bindNavPrevention: true,
    postfix: "",
    imageUploader:
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    ,
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    );



    );













    draft saved

    draft discarded


















    StackExchange.ready(
    function ()
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53280499%2fwhy-is-the-result-of-pluginmanager-getextensions-empty%23new-answer', 'question_page');

    );

    Post as a guest















    Required, but never shown

























    1 Answer
    1






    active

    oldest

    votes








    1 Answer
    1






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    0














    Workaround #1



    use a customized PluginManager



    pluginManager = new JarPluginManager(this.getClass().getClassLoader());


    from the class that will use the plugin to make sure the same classloader is used



    JarPluginManager source code:



    import java.nio.file.Path;

    import org.pf4j.DefaultPluginManager;
    import org.pf4j.JarPluginLoader;
    import org.pf4j.ManifestPluginDescriptorFinder;
    import org.pf4j.PluginClassLoader;
    import org.pf4j.PluginDescriptor;
    import org.pf4j.PluginDescriptorFinder;
    import org.pf4j.PluginLoader;
    import org.pf4j.PluginManager;

    /**
    * see https://github.com/pf4j/pf4j/issues/249 see
    * https://pf4j.org/doc/class-loading.html
    *
    * @author wf
    *
    */
    public class JarPluginManager extends DefaultPluginManager
    public static class ParentClassLoaderJarPluginLoader extends JarPluginLoader
    static ClassLoader parentClassLoader;

    /**
    *
    * @param pluginManager
    */
    public ParentClassLoaderJarPluginLoader(PluginManager pluginManager)
    super(pluginManager);


    static PluginClassLoader pluginClassLoader;

    @Override
    public ClassLoader loadPlugin(Path pluginPath,
    PluginDescriptor pluginDescriptor)
    if (pluginClassLoader == null)
    boolean parentFirst=true;
    pluginClassLoader = new PluginClassLoader(pluginManager,
    pluginDescriptor, parentClassLoader,parentFirst);

    pluginClassLoader.addFile(pluginPath.toFile());

    return pluginClassLoader;



    /**
    * construct me with the given classloader
    * @param classLoader
    */
    public JarPluginManager(ClassLoader classLoader)
    ParentClassLoaderJarPluginLoader.parentClassLoader=classLoader;
    //System.setProperty("pf4j.mode", RuntimeMode.DEPLOYMENT.toString());
    //System.setProperty("pf4j.mode", RuntimeMode.DEVELOPMENT.toString());


    @Override
    protected PluginLoader createPluginLoader()
    // load only jar plugins
    return new ParentClassLoaderJarPluginLoader(this);


    @Override
    protected PluginDescriptorFinder createPluginDescriptorFinder()
    // read plugin descriptor from jar's manifest
    return new ManifestPluginDescriptorFinder();





    Workaround #2
    If the extensions.idx file is not created there is something wrong with your annotation processing. You might want to fix the source of the problem but it is also possible to try to work around it:



    • https://groups.google.com/forum/#!topic/pf4j/nn20axJHpfI
      pointed me to creating the META-INF/extensions.idx file manually and making sure there is a no args constructor for the static inner class. With this change things work.


    • Watch out for setting the classname correctly in the extensions.idx
      file - otherwise you'll end up with a null entry in the handler list


    • Watch out for having a null argument constructor otherwise you'll endup with an exception


    @Extension
    public static class MBClickHandler implements ClickHandler {
    /**
    * constructor with no argument
    */
    public MBClickHandler()




    src/main/resources/META-INF/extensions.idx



    com.bitplan.mb.MBClickHandlerPlugin$MBClickHandler


    Code to check



    1. Correct name for extension.idx entry

    MBClickHandler ch=new MBClickHandler();
    File extFile=new File("src/main/resources/META-INF/extensions.idx");
    String extidx=FileUtils.readFileToString(extFile,"UTF-8");
    assertEquals(extidx,ch.getClass().getName());



    1. checking the extensions

    List<PluginWrapper> startedPlugins = pluginManager.getStartedPlugins();

    for (PluginWrapper plugin : startedPlugins)
    String pluginId = plugin.getDescriptor().getPluginId();
    System.out.println(String.format("Extensions added by plugin '%s':", pluginId));
    Set<String> extensionClassNames = pluginManager.getExtensionClassNames(pluginId);
    for (String extension : extensionClassNames)
    System.out.println(" " + extension);







    share|improve this answer





























      0














      Workaround #1



      use a customized PluginManager



      pluginManager = new JarPluginManager(this.getClass().getClassLoader());


      from the class that will use the plugin to make sure the same classloader is used



      JarPluginManager source code:



      import java.nio.file.Path;

      import org.pf4j.DefaultPluginManager;
      import org.pf4j.JarPluginLoader;
      import org.pf4j.ManifestPluginDescriptorFinder;
      import org.pf4j.PluginClassLoader;
      import org.pf4j.PluginDescriptor;
      import org.pf4j.PluginDescriptorFinder;
      import org.pf4j.PluginLoader;
      import org.pf4j.PluginManager;

      /**
      * see https://github.com/pf4j/pf4j/issues/249 see
      * https://pf4j.org/doc/class-loading.html
      *
      * @author wf
      *
      */
      public class JarPluginManager extends DefaultPluginManager
      public static class ParentClassLoaderJarPluginLoader extends JarPluginLoader
      static ClassLoader parentClassLoader;

      /**
      *
      * @param pluginManager
      */
      public ParentClassLoaderJarPluginLoader(PluginManager pluginManager)
      super(pluginManager);


      static PluginClassLoader pluginClassLoader;

      @Override
      public ClassLoader loadPlugin(Path pluginPath,
      PluginDescriptor pluginDescriptor)
      if (pluginClassLoader == null)
      boolean parentFirst=true;
      pluginClassLoader = new PluginClassLoader(pluginManager,
      pluginDescriptor, parentClassLoader,parentFirst);

      pluginClassLoader.addFile(pluginPath.toFile());

      return pluginClassLoader;



      /**
      * construct me with the given classloader
      * @param classLoader
      */
      public JarPluginManager(ClassLoader classLoader)
      ParentClassLoaderJarPluginLoader.parentClassLoader=classLoader;
      //System.setProperty("pf4j.mode", RuntimeMode.DEPLOYMENT.toString());
      //System.setProperty("pf4j.mode", RuntimeMode.DEVELOPMENT.toString());


      @Override
      protected PluginLoader createPluginLoader()
      // load only jar plugins
      return new ParentClassLoaderJarPluginLoader(this);


      @Override
      protected PluginDescriptorFinder createPluginDescriptorFinder()
      // read plugin descriptor from jar's manifest
      return new ManifestPluginDescriptorFinder();





      Workaround #2
      If the extensions.idx file is not created there is something wrong with your annotation processing. You might want to fix the source of the problem but it is also possible to try to work around it:



      • https://groups.google.com/forum/#!topic/pf4j/nn20axJHpfI
        pointed me to creating the META-INF/extensions.idx file manually and making sure there is a no args constructor for the static inner class. With this change things work.


      • Watch out for setting the classname correctly in the extensions.idx
        file - otherwise you'll end up with a null entry in the handler list


      • Watch out for having a null argument constructor otherwise you'll endup with an exception


      @Extension
      public static class MBClickHandler implements ClickHandler {
      /**
      * constructor with no argument
      */
      public MBClickHandler()




      src/main/resources/META-INF/extensions.idx



      com.bitplan.mb.MBClickHandlerPlugin$MBClickHandler


      Code to check



      1. Correct name for extension.idx entry

      MBClickHandler ch=new MBClickHandler();
      File extFile=new File("src/main/resources/META-INF/extensions.idx");
      String extidx=FileUtils.readFileToString(extFile,"UTF-8");
      assertEquals(extidx,ch.getClass().getName());



      1. checking the extensions

      List<PluginWrapper> startedPlugins = pluginManager.getStartedPlugins();

      for (PluginWrapper plugin : startedPlugins)
      String pluginId = plugin.getDescriptor().getPluginId();
      System.out.println(String.format("Extensions added by plugin '%s':", pluginId));
      Set<String> extensionClassNames = pluginManager.getExtensionClassNames(pluginId);
      for (String extension : extensionClassNames)
      System.out.println(" " + extension);







      share|improve this answer



























        0












        0








        0







        Workaround #1



        use a customized PluginManager



        pluginManager = new JarPluginManager(this.getClass().getClassLoader());


        from the class that will use the plugin to make sure the same classloader is used



        JarPluginManager source code:



        import java.nio.file.Path;

        import org.pf4j.DefaultPluginManager;
        import org.pf4j.JarPluginLoader;
        import org.pf4j.ManifestPluginDescriptorFinder;
        import org.pf4j.PluginClassLoader;
        import org.pf4j.PluginDescriptor;
        import org.pf4j.PluginDescriptorFinder;
        import org.pf4j.PluginLoader;
        import org.pf4j.PluginManager;

        /**
        * see https://github.com/pf4j/pf4j/issues/249 see
        * https://pf4j.org/doc/class-loading.html
        *
        * @author wf
        *
        */
        public class JarPluginManager extends DefaultPluginManager
        public static class ParentClassLoaderJarPluginLoader extends JarPluginLoader
        static ClassLoader parentClassLoader;

        /**
        *
        * @param pluginManager
        */
        public ParentClassLoaderJarPluginLoader(PluginManager pluginManager)
        super(pluginManager);


        static PluginClassLoader pluginClassLoader;

        @Override
        public ClassLoader loadPlugin(Path pluginPath,
        PluginDescriptor pluginDescriptor)
        if (pluginClassLoader == null)
        boolean parentFirst=true;
        pluginClassLoader = new PluginClassLoader(pluginManager,
        pluginDescriptor, parentClassLoader,parentFirst);

        pluginClassLoader.addFile(pluginPath.toFile());

        return pluginClassLoader;



        /**
        * construct me with the given classloader
        * @param classLoader
        */
        public JarPluginManager(ClassLoader classLoader)
        ParentClassLoaderJarPluginLoader.parentClassLoader=classLoader;
        //System.setProperty("pf4j.mode", RuntimeMode.DEPLOYMENT.toString());
        //System.setProperty("pf4j.mode", RuntimeMode.DEVELOPMENT.toString());


        @Override
        protected PluginLoader createPluginLoader()
        // load only jar plugins
        return new ParentClassLoaderJarPluginLoader(this);


        @Override
        protected PluginDescriptorFinder createPluginDescriptorFinder()
        // read plugin descriptor from jar's manifest
        return new ManifestPluginDescriptorFinder();





        Workaround #2
        If the extensions.idx file is not created there is something wrong with your annotation processing. You might want to fix the source of the problem but it is also possible to try to work around it:



        • https://groups.google.com/forum/#!topic/pf4j/nn20axJHpfI
          pointed me to creating the META-INF/extensions.idx file manually and making sure there is a no args constructor for the static inner class. With this change things work.


        • Watch out for setting the classname correctly in the extensions.idx
          file - otherwise you'll end up with a null entry in the handler list


        • Watch out for having a null argument constructor otherwise you'll endup with an exception


        @Extension
        public static class MBClickHandler implements ClickHandler {
        /**
        * constructor with no argument
        */
        public MBClickHandler()




        src/main/resources/META-INF/extensions.idx



        com.bitplan.mb.MBClickHandlerPlugin$MBClickHandler


        Code to check



        1. Correct name for extension.idx entry

        MBClickHandler ch=new MBClickHandler();
        File extFile=new File("src/main/resources/META-INF/extensions.idx");
        String extidx=FileUtils.readFileToString(extFile,"UTF-8");
        assertEquals(extidx,ch.getClass().getName());



        1. checking the extensions

        List<PluginWrapper> startedPlugins = pluginManager.getStartedPlugins();

        for (PluginWrapper plugin : startedPlugins)
        String pluginId = plugin.getDescriptor().getPluginId();
        System.out.println(String.format("Extensions added by plugin '%s':", pluginId));
        Set<String> extensionClassNames = pluginManager.getExtensionClassNames(pluginId);
        for (String extension : extensionClassNames)
        System.out.println(" " + extension);







        share|improve this answer















        Workaround #1



        use a customized PluginManager



        pluginManager = new JarPluginManager(this.getClass().getClassLoader());


        from the class that will use the plugin to make sure the same classloader is used



        JarPluginManager source code:



        import java.nio.file.Path;

        import org.pf4j.DefaultPluginManager;
        import org.pf4j.JarPluginLoader;
        import org.pf4j.ManifestPluginDescriptorFinder;
        import org.pf4j.PluginClassLoader;
        import org.pf4j.PluginDescriptor;
        import org.pf4j.PluginDescriptorFinder;
        import org.pf4j.PluginLoader;
        import org.pf4j.PluginManager;

        /**
        * see https://github.com/pf4j/pf4j/issues/249 see
        * https://pf4j.org/doc/class-loading.html
        *
        * @author wf
        *
        */
        public class JarPluginManager extends DefaultPluginManager
        public static class ParentClassLoaderJarPluginLoader extends JarPluginLoader
        static ClassLoader parentClassLoader;

        /**
        *
        * @param pluginManager
        */
        public ParentClassLoaderJarPluginLoader(PluginManager pluginManager)
        super(pluginManager);


        static PluginClassLoader pluginClassLoader;

        @Override
        public ClassLoader loadPlugin(Path pluginPath,
        PluginDescriptor pluginDescriptor)
        if (pluginClassLoader == null)
        boolean parentFirst=true;
        pluginClassLoader = new PluginClassLoader(pluginManager,
        pluginDescriptor, parentClassLoader,parentFirst);

        pluginClassLoader.addFile(pluginPath.toFile());

        return pluginClassLoader;



        /**
        * construct me with the given classloader
        * @param classLoader
        */
        public JarPluginManager(ClassLoader classLoader)
        ParentClassLoaderJarPluginLoader.parentClassLoader=classLoader;
        //System.setProperty("pf4j.mode", RuntimeMode.DEPLOYMENT.toString());
        //System.setProperty("pf4j.mode", RuntimeMode.DEVELOPMENT.toString());


        @Override
        protected PluginLoader createPluginLoader()
        // load only jar plugins
        return new ParentClassLoaderJarPluginLoader(this);


        @Override
        protected PluginDescriptorFinder createPluginDescriptorFinder()
        // read plugin descriptor from jar's manifest
        return new ManifestPluginDescriptorFinder();





        Workaround #2
        If the extensions.idx file is not created there is something wrong with your annotation processing. You might want to fix the source of the problem but it is also possible to try to work around it:



        • https://groups.google.com/forum/#!topic/pf4j/nn20axJHpfI
          pointed me to creating the META-INF/extensions.idx file manually and making sure there is a no args constructor for the static inner class. With this change things work.


        • Watch out for setting the classname correctly in the extensions.idx
          file - otherwise you'll end up with a null entry in the handler list


        • Watch out for having a null argument constructor otherwise you'll endup with an exception


        @Extension
        public static class MBClickHandler implements ClickHandler {
        /**
        * constructor with no argument
        */
        public MBClickHandler()




        src/main/resources/META-INF/extensions.idx



        com.bitplan.mb.MBClickHandlerPlugin$MBClickHandler


        Code to check



        1. Correct name for extension.idx entry

        MBClickHandler ch=new MBClickHandler();
        File extFile=new File("src/main/resources/META-INF/extensions.idx");
        String extidx=FileUtils.readFileToString(extFile,"UTF-8");
        assertEquals(extidx,ch.getClass().getName());



        1. checking the extensions

        List<PluginWrapper> startedPlugins = pluginManager.getStartedPlugins();

        for (PluginWrapper plugin : startedPlugins)
        String pluginId = plugin.getDescriptor().getPluginId();
        System.out.println(String.format("Extensions added by plugin '%s':", pluginId));
        Set<String> extensionClassNames = pluginManager.getExtensionClassNames(pluginId);
        for (String extension : extensionClassNames)
        System.out.println(" " + extension);








        share|improve this answer














        share|improve this answer



        share|improve this answer








        edited Dec 4 '18 at 16:00

























        answered Nov 13 '18 at 12:53









        Wolfgang FahlWolfgang Fahl

        6,51064496




        6,51064496





























            draft saved

            draft discarded
















































            Thanks for contributing an answer to Stack Overflow!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid


            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.

            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function ()
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53280499%2fwhy-is-the-result-of-pluginmanager-getextensions-empty%23new-answer', 'question_page');

            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            Use pre created SQLite database for Android project in kotlin

            Darth Vader #20

            Ondo