我正在嘗試在現(xiàn)有代碼庫中使用 PF4J。我試圖將所有必要的東西從演示插件和應用程序轉移到我現(xiàn)有的 maven 項目中。我已經(jīng)比較了演示和我的代碼,我找不到任何不同的地方。然而,當我構建插件的 .jar 文件時,生成的 extensions.idx 中有一條注釋說它是由 PF4J 生成的,但它是空的。那里應該有對我插件的內(nèi)部類的引用,但沒有。在演示插件中,有。我猜這是我的 Maven 設置(我的 pom 文件之一)的問題,但我看了又看,無法弄清楚。這是我的插件的 Java 文件:package com.inlet.ifserver.plugin.reaper;import com.inlet.plugin.InletFetchReaper;import org.apache.commons.lang.StringUtils;import org.pf4j.Extension;import org.pf4j.Plugin;import org.pf4j.PluginWrapper;import org.pf4j.RuntimeMode;/** * @author Decebal Suiu */public class ReaperAPlugin extends Plugin { public ReaperAPlugin(PluginWrapper wrapper) { super(wrapper); } @Override public void start() { System.out.println("WelcomePlugin.start()"); // for testing the development mode if (RuntimeMode.DEVELOPMENT.equals(wrapper.getRuntimeMode())) { System.out.println(StringUtils.upperCase("WelcomePlugin")); } } @Override public void stop() { System.out.println("WelcomePlugin.stop()"); } @Extension public static class ReaperA implements InletFetchReaper { @Override public void reap() { System.out.println("ReaperA"); } }}我的猜測是我的代碼沒有被掃描以找到 @Extension 注釋。我不知道那是怎么回事。我希望其他人已經(jīng)遇到了這個問題,并且知道我錯過了一些簡單的事情。誰能告訴我為什么會這樣?如果有人可以讓我深入了解 Maven 是如何在它生成的 .jar 文件中創(chuàng)建 extensions.idx 文件的,那可能會讓我得到答案。
3 回答

慕沐林林
TA貢獻2016條經(jīng)驗 獲得超9個贊
我想通了。我為我的插件定義了這樣的接口:
package com.inlet.plugin;
public interface InletFetchReaper {
void reap();
}
但它應該是(現(xiàn)在是)這個:
package com.inlet.plugin;
import org.pf4j.ExtensionPoint;
public interface InletFetchReaper extends ExtensionPoint {
void reap();
}
認為這將是一些簡單的事情。

慕尼黑的夜晚無繁華
TA貢獻1864條經(jīng)驗 獲得超6個贊
我代表 Decebal 發(fā)布此答案:
請創(chuàng)建一個問題作為功能請求。我認為這將有助于檢查 PF4J。
例如,您將擴展聲明為:
@Extension
public static class ReaperA implements InletFetchReaper {
}
我認為如果注釋處理器通過反射驗證InletFetchReaper(您的擴展實現(xiàn)的單個接口)擴展,這將很有用ExtensionPoint。
添加回答
舉報
0/150
提交
取消