Java 的 ServiceLoader 需要这些条目出现在 JAR 文件中。在 IDE 内部时,有没有办法在运行时以编程方式添加这些服务条目以进行单元测试?尤其是当尚未构建 JAR 时。
最佳答案
不要太专注于 JAR 文件。它们是封装服务的首选方式,但不是必需的。关键真的是ClassLoader.getResources(String)
- String
arg 实际上变成了 ("META-INF/services/"+ serviceClass.getName())
。要记住的另一点信息是 ServiceLoader.load(Class)
使用context class loader (当然,您也可以使用 ServiceLoader.load(Class, ClassLoader)
)。所以...您真正需要做的是操纵类路径或配置上下文类加载器,以使 ServiceLoader
满意。
关于java - Java ServiceLoader 在开发期间如何工作? (构建 JAR 之前的单元测试?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3151933/