在ServiceLoader迭代中找不到ServiceProvider

时间:2018-07-01 10:29:02

标签: java eclipse maven

我有一个项目,该项目需要使用ServiceLoader才能确定。

我想在具有(外部)Spi jar的Maven依赖关系的Eclipse中运行MainApp,并在其中包含AProvider(声明methodX的接口)和Service(遍历serviceproviders)。 MainApp调用Service.methodX,并且应该从外部Sp.jar中的AProviderImpl获取结果。

Sp.jar具有对Spi jar的Maven依赖关系,当然还有src / main / resources / META-INF / services / fullclassnameAProvider,其中具有fullclassnameAProviderImpl

所以依赖项就像MainApp-> Spi <-Sp 在Maven回购中有Spi.jar,Sp.jar和MainApp.ear

问题是,Service中的(Sp sp:ServiceLoader.load(AProvider.class))的迭代找不到任何服务提供者。

我不想让Spi NOR MainApp通过依赖性了解Sp。这不是ServiceLoader应该安排的吗? 我是否必须将Sp显式添加到MainApp的类路径中?

还是我认为Spi和Sp应该能够分开是不对的?我认为不是还是我?

谢谢您的考虑,贤治

1 个答案:

答案 0 :(得分:0)

如果为SP提供范围runtime,它将仅在运行时使用。一种或另一种方式:最后,SP必须位于类路径上。