第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么 pluginManager.getExtensions 的結(jié)果為空?

為什么 pluginManager.getExtensions 的結(jié)果為空?

慕桂英546537 2022-01-19 09:44:28
嘗試使用 PF4J 時,我創(chuàng)建了必要的部分,如https://github.com/pf4j/pf4j擴展 ExtensionPoint 的接口一個插件帶有清單的罐子插件加載和激活為什么 clickHandlers 列表是空的?我已經(jīng)使用 JUnit 測試對此進(jìn)行了測試,我可以在其中調(diào)試似乎工作正常的其他部分。請參閱下面的調(diào)試日志。我還查看了https://github.com/pf4j/pf4j/issues/21并激活了 Eclipse 注釋處理,但沒有任何積極影響。1.擴展擴展點的接口public interface ClickHandler extends ExtensionPoint {...}2.一個插件public class MBClickHandlerPlugin extends Plugin {  /**   * construct me   * @param wrapper   */  public MBClickHandlerPlugin(PluginWrapper wrapper) {    super(wrapper);  }  @Extension  public static class  MBClickHandler implements ClickHandler {  }}3. 帶有清單的罐子unzip -q -c target/com.bitplan.mb-0.0.1.jar META-INF/MANIFEST.MFManifest-Version: 1.0Plugin-Dependencies: Plugin-Id: com.bitplan.mbBuilt-By: wfPlugin-Provider: BITPlan GmbHPlugin-Version: 0.0.1Plugin-Class: com.bitplan.mb.MBClickHandlerPluginCreated-By: Apache Maven 3.5.2Build-Jdk: 1.8.0_1524.插件加載和激活  /**   * 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);    }  }
查看完整描述

1 回答

?
慕的地6264312

TA貢獻(xiàn)1817條經(jīng)驗 獲得超6個贊

解決方法 #1


使用定制的 PluginManager


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

從將使用插件的類中確保使用相同的類加載器


JarPluginManager 源代碼:


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();

  }


}

解決方法 #2 如果未創(chuàng)建 extensions.idx 文件,則說明您的注釋處理有問題。您可能想解決問題的根源,但也可以嘗試解決它:


https://groups.google.com/forum/#!topic/pf4j/nn20axJHpfI 指出我手動創(chuàng)建 META-INF/extensions.idx 文件并確保靜態(tài)內(nèi)部類沒有 args 構(gòu)造函數(shù)。有了這個改變,事情就開始了。


注意在 extensions.idx 文件中正確設(shè)置類名 - 否則您將在處理程序列表中得到一個空條目


注意有一個空參數(shù)構(gòu)造函數(shù),否則你會得到一個異常


@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

要檢查的代碼


extension.idx 條目的正確名稱

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());

檢查擴展

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);

       }

    }


查看完整回答
反對 回復(fù) 2022-01-19
  • 1 回答
  • 0 關(guān)注
  • 529 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號