eclipse 在maven?中不同模块之间的ServiceLoader和META-INF/服务生成器

yqkkidmi  于 2023-02-04  发布在  Eclipse
关注(0)|答案(1)|浏览(165)

我想在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/* 文件。不需要额外的编译器开关。此库也能正确处理增量编译。
在我的情况下,没有生成任何东西。有人能帮我吗?

mctunoxg

mctunoxg1#

从你的类HelloWorldPlugin的代码片段来看,并不清楚哪个接口是“契约”,在你给出的链接中:
如果有多个接口和/或基类型,则库无法推断协定类型。在这种情况下,请通过将协定类型提供给@MetaInfServices..来显式指定协定类型。
因此,首先你必须确定你希望履行哪一个契约,如果父类实现了几个契约,那么你需要在@MetaInfServices注解中显式地声明是哪一个。
我想这是第一件要检查的事。

相关问题