我正在尝试在现有代码库中使用PF4J。我试图将所有必要的东西从演示插件和应用程序转移到我现有的maven项目中。我已经比较了演示和代码,但找不到任何不同的地方。但是,当我构建插件的.jar文件时,生成的extensions.idx中有一条注释,指出它是PF4J的generate3d,否则为空。那里应该有我插件的内部类的引用,但是没有。在演示插件中。
我猜想这是我的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文件的见解,那可能会带给我答案。
TIA寻求帮助!
答案 0 :(得分:0)
我知道了。我为插件定义了接口,如下所示:
package com.inlet.plugin;
public interface InletFetchReaper {
void reap();
}
但它本来应该是(现在是)
package com.inlet.plugin;
import org.pf4j.ExtensionPoint;
public interface InletFetchReaper extends ExtensionPoint {
void reap();
}
想到这会很简单。
答案 1 :(得分:0)
我代表Decebal发布此答案:
请创建一个issue作为功能请求。 我认为对PF4J进行检查会很有用。
例如,您将扩展名声明为:
@Extension
public static class ReaperA implements InletFetchReaper {
}
我认为,如果注释处理器通过反射验证InletFetchReaper
(由您的扩展程序实现的单个接口)扩展了ExtensionPoint
,将会很有用。