首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当构建一个非常简单的PF4J插件时,我的extension.idx文件是空的。为什么?

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

Stack Overflow用户
提问于 2019-02-18 08:36:56
回答 3查看 759关注 0票数 1

我试图在现有的代码库中使用PF4J。我已经尝试把所有必要的从演示插件和应用程序转移到我现有的maven项目。我比较了演示和我的代码,我找不到任何不同的东西。然而,当我构建插件的.jar文件时,生成的extensions.idx中有一条注释说它是generate3d by PF4J,但在其他方面是空的。应该有一个参考我插件的内部类,但没有。在演示插件中,有。

我猜想这是我的Maven设置(我的pom文件之一)的问题,但是我已经看过了,并且找不到这一点。下面是我的插件的Java文件:

代码语言:javascript
复制
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文件的,这可能会给我带来一个答案。

蒂娅需要任何帮助!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-02-18 16:42:46

我想出来了。我为我的插件定义了如下界面:

代码语言:javascript
复制
package com.inlet.plugin;

public interface InletFetchReaper {
    void reap();
}

但它应该是(现在也是如此):

代码语言:javascript
复制
package com.inlet.plugin;

import org.pf4j.ExtensionPoint;

public interface InletFetchReaper extends ExtensionPoint {
    void reap();
}

我想这会很简单。

票数 3
EN

Stack Overflow用户

发布于 2019-09-26 05:13:39

我谨代表Decebal发表这一答复:

请创建一个问题作为功能请求。我认为在PF4J中进行检查是有用的。

例如,您将扩展声明为:

代码语言:javascript
复制
@Extension
public static class ReaperA implements InletFetchReaper {
}

我认为,如果注释处理器通过反射验证InletFetchReaper (由扩展实现的单个接口)对ExtensionPoint进行扩展,那么这将是有用的。

票数 0
EN

Stack Overflow用户

发布于 2021-10-12 10:45:21

在我的例子中,我忘记将插件API上的Maven依赖标记为<scope>provided</scope>

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54743218

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档