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

时间:2019-02-18 08:36:56

标签: java pf4j

我正在尝试在现有代码库中使用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寻求帮助!

2 个答案:

答案 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,将会很有用。