java - ServiceLoader 找不到我的实现
问题描述
我正在尝试将 ServiceLoader 与模块系统一起使用,与此处文档中将服务提供者部署为模块标题中所示的方式相同 -单击
我有以下项目:
模块 tester.client
package tester.client;
import tester.common.Showable;
import java.util.ServiceLoader;
public class Main {
public static void main(String[] args) {
ServiceLoader<Showable> loader = ServiceLoader.load(Showable.class);
loader.findFirst().orElseThrow(); //throws Exception
}
}
模块信息.java
import tester.common.Showable;
module tester.client {
requires tester.common;
uses Showable;
}
模块 tester.common
package tester.common;
public interface Showable {
void show();
}
模块信息.java
module tester.common {
exports tester.common;
}
模块 tester.gui
package tester.gui;
import tester.common.Showable;
public class Window implements Showable {
@Override
public void show() {
}
}
模块信息.java
module tester.gui {
requires tester.common;
provides tester.common.Showable with tester.gui.Window;
}
问题:
ServiceLoader 不加载我的实现。
- tester.client 使用 Showable
- tester.common 导出 Showable
- tester.gui 提供 Showable 和 Window
解决方案
事实证明,问题是特定于 IDE 的。由于我的 IDE(Intellij IDEA)有自己的附加模块系统,我需要添加tester.gui
模块作为模块的依赖项tester.client
。
@samabcde提供的解决方案
推荐阅读
- wordpress - 如何更改 MapBox 弹出窗口的位置?
- c# - 如何在 Xamarin.Forms 中显示来自设备存储的图像?
- javascript - 如何在不重新启动页面的情况下将值传递给模式?
- javascript - React-Native-Maps:设置地图边界功能不准确
- unity3d - 带输入的 Drop In Drop Out 系统?
- android - 子项目模块无法解析它自己的依赖
- javascript - jsp中的Json Hash映射视图
- dart - 如何检查值是否为枚举?
- mongodb - $addToSet 没有更新数组中的对象?
- javascript - 反应上下文 - 'contextType' 未定义