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/