ServiceLoader 找不到任何服务

ServiceLoader not finding any services

我遇到了 ServiceLoader 找不到提供的服务的问题。

我已经使用常规项目和以下来源进行了测试:

// test/Tester.java
package test;

public interface Tester {
}

// test/TesterImpl.java
package test;

public class TesterImpl implements Tester {
}

// test/Runner.java
package test;

import java.util.ServiceLoader;

public class Runner {
    public static void main(String[] args) {
        var loader = ServiceLoader.load(Tester.class);
        for (var tester : loader) {
            System.out.println(tester);
        }
    }
}

// module-info.java
import test.Tester;
import test.TesterImpl;

module module {
    uses Tester;
    provides Tester with TesterImpl;
}

以上打印出类似于 test.TesterImpl@1fb3ebeb 的内容,证明它可以正常工作。

当我尝试通过 maven-compiler-plugin 在 AbstractProcessor(即 运行)中使用 ServiceLoader.load(...) 时,同样无法正常工作。处理器 returns 改为一个空迭代器。需要什么才能使其在注释处理器中的行为与上述情况相同?

这个问题的解决方案是指定一个 class 加载器 - 注释处理器使用的 classloader 似乎与我尝试加载的 classes 不同服务来自。解决方案如下:

ServiceLoader.load(MyService.class, MyAnnotationProcessor.class.getClassLoader())