首页 > 解决方案 > 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 不加载我的实现。

标签: javajava-moduleserviceloader

解决方案


事实证明,问题是特定于 IDE 的。由于我的 IDE(Intellij IDEA)有自己的附加模块系统,我需要添加tester.gui模块作为模块的依赖项tester.client

@samabcde提供的解决方案


推荐阅读