我试图在现有的代码库中使用PF4J。我已经尝试把所有必要的从演示插件和应用程序转移到我现有的maven项目。我比较了演示和我的代码,我找不到任何不同的东西。然而,当我构建插件的.jar文件时,生成的extensions.idx中有一条注释说它是generate3d by 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是如何在它生成的extensions.idx文件中创建.jar文件的,这可能会给我带来一个答案。
蒂娅需要任何帮助!
发布于 2019-02-18 16:42:46
我想出来了。我为我的插件定义了如下界面:
package com.inlet.plugin;
public interface InletFetchReaper {
void reap();
}但它应该是(现在也是如此):
package com.inlet.plugin;
import org.pf4j.ExtensionPoint;
public interface InletFetchReaper extends ExtensionPoint {
void reap();
}我想这会很简单。
发布于 2019-09-26 05:13:39
我谨代表Decebal发表这一答复:
请创建一个问题作为功能请求。我认为在PF4J中进行检查是有用的。
例如,您将扩展声明为:
@Extension
public static class ReaperA implements InletFetchReaper {
}我认为,如果注释处理器通过反射验证InletFetchReaper (由扩展实现的单个接口)对ExtensionPoint进行扩展,那么这将是有用的。
发布于 2021-10-12 10:45:21
在我的例子中,我忘记将插件API上的Maven依赖标记为<scope>provided</scope>。
https://stackoverflow.com/questions/54743218
复制相似问题