为了账号安全,请及时绑定邮箱和手机立即绑定

在构建一个非常简单的 PF4J 插件时,我的 extension.idx 文件是空的。为什么?

在构建一个非常简单的 PF4J 插件时,我的 extension.idx 文件是空的。为什么?

浮云间 2022-06-23 16:51:23
我正在尝试在现有代码库中使用 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();

}

认为这将是一些简单的事情。


查看完整回答
反对 回复 2022-06-23
?
泛舟湖上清波郎朗

TA贡献1818条经验 获得超3个赞

在我的情况下,我忘记将插件 API 上的 Maven 依赖项标记为<scope>provided</scope>.



查看完整回答
反对 回复 2022-06-23
?
慕尼黑的夜晚无繁华

TA贡献1864条经验 获得超6个赞

我代表 Decebal 发布此答案:


请创建一个问题作为功能请求。我认为这将有助于检查 PF4J。


例如,您将扩展声明为:


@Extension

public static class ReaperA implements InletFetchReaper {

}

我认为如果注释处理器通过反射验证InletFetchReaper(您的扩展实现的单个接口)扩展,这将很有用ExtensionPoint。


查看完整回答
反对 回复 2022-06-23
  • 3 回答
  • 0 关注
  • 367 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信