我有一个项目,该项目需要使用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应该能够分开是不对的?我认为不是还是我?
谢谢您的考虑,贤治
答案 0 :(得分:0)
如果为SP提供范围runtime
,它将仅在运行时使用。一种或另一种方式:最后,SP必须位于类路径上。