我正在尝试在现有代码库中使用 PF4J。我试图将所有必要的东西从演示插件和应用程序转移到我现有的 maven 项目中。我已经比较了演示和我的代码,我找不到任何不同的地方。然而,当我构建插件的 .jar 文件时,生成的 extensions.idx 中有一条注释说它是由 PF4J 生成的,但它是空的。那里应该有对我插件的内部类的引用,但没有。在演示插件中,有。我猜这是我的 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 注释。我不知道那是怎么回事。我希望其他人已经遇到了这个问题,并且知道我错过了一些简单的事情。谁能告诉我为什么会这样?如果有人可以让我深入了解 Maven 是如何在它生成的 .jar 文件中创建 extensions.idx 文件的,那可能会让我得到答案。
3 回答
慕沐林林
TA贡献2016条经验 获得超9个赞
我想通了。我为我的插件定义了这样的接口:
package com.inlet.plugin;
public interface InletFetchReaper {
void reap();
}
但它应该是(现在是)这个:
package com.inlet.plugin;
import org.pf4j.ExtensionPoint;
public interface InletFetchReaper extends ExtensionPoint {
void reap();
}
认为这将是一些简单的事情。
慕尼黑的夜晚无繁华
TA贡献1864条经验 获得超6个赞
我代表 Decebal 发布此答案:
请创建一个问题作为功能请求。我认为这将有助于检查 PF4J。
例如,您将扩展声明为:
@Extension
public static class ReaperA implements InletFetchReaper {
}
我认为如果注释处理器通过反射验证InletFetchReaper(您的扩展实现的单个接口)扩展,这将很有用ExtensionPoint。
添加回答
举报
0/150
提交
取消