我想在maven项目中的不同模块之间使用服务ServiceLoader。我有一个名为iMage的父模块。在父模块中有一个名为jmjrst.main的模块,它有一个名为JmjrstPlugin
的公共抽象类。
还有另一个名为prizm-plugin的模块,包含以下类:
public class HelloWorldPlugin extends JmjrstPlugin{ ... }
我将jmjrst.main
作为依赖项添加到prizm-plugin
,反之亦然。
为了使用ServiceLoader,我想使用META-INF/services generator。我在prizm-plugin的pom.xml中添加了以下代码行:
<dependency>
<groupId>org.kohsuke.metainf-services</groupId>
<artifactId>metainf-services</artifactId>
<version>1.1</version>
<optional>true</optional>
</dependency>
HelloWorldPlugin类的开头是这样的:
@MetaInfServices(JmjrstPlugin.class)
public class HelloWorldPlugin extends JmjrstPlugin{ ... }
在META-INF/services generator的网站上写道:在JavaSE 6中使用javac时,会自动生成META-INF/services/* 文件。不需要额外的编译器开关。此库也能正确处理增量编译。
在我的情况下,没有生成任何东西。有人能帮我吗?
1条答案
按热度按时间mctunoxg1#
从你的类
HelloWorldPlugin
的代码片段来看,并不清楚哪个接口是“契约”,在你给出的链接中:如果有多个接口和/或基类型,则库无法推断协定类型。在这种情况下,请通过将协定类型提供给@MetaInfServices..来显式指定协定类型。
因此,首先你必须确定你希望履行哪一个契约,如果父类实现了几个契约,那么你需要在
@MetaInfServices
注解中显式地声明是哪一个。我想这是第一件要检查的事。