3

我想在 Maven 项目中的不同模块之间使用服务 ServiceLoader。我有一个名为 iMage 的父模块。在父模块中有一个名为 jmjrst.main 的模块,它有一个名为“JmjrstPlugin”的公共抽象类。

然后是另一个名为 prizm-plugin 的模块,它具有以下类:public class HelloWorldPlugin extends JmjrstPlugin{ ... }。我还添加了 jmjrst.main 作为对 prizm-plugin 和 vica-versa 的依赖项。

为了使用 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 生成器的网站上写道:“当您在 JavaSE6 中使用 javac 时,会自动生成 META-INF/services/* 文件。不需要额外的编译器开关。这个库也可以正确处理增量编译。”

在我的情况下,什么都没有产生。有人可以帮我吗?

4

1 回答 1

0

从您的课程的代码片段中,HelloWorldPlugin不清楚哪个接口是“合同”。在您提供的链接中:

如果您有多个接口和/或基本类型,则库无法推断合同类型。在这种情况下,通过将合同类型明确指定给 @MetaInfServices ..

所以首先你必须确定你希望履行哪个合同,如果父类实现了几个,那么你需要在@MetaInfServices注释中明确说明哪一个。

这是我认为首先要检查的事情。

于 2017-06-03T16:04:53.120 回答