我遇到了 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(...)
时,同样无法工作。相反,处理器返回一个空迭代器。需要什么才能使其在注释处理器中的行为与上述情况相同?
最佳答案
此问题的解决方案是指定一个类加载器 - 看来注释处理器使用的类加载器与我尝试从中加载服务的类不同。解决办法如下:
ServiceLoader.load(MyService.class, MyAnnotationProcessor.class.getClassLoader())
关于java - ServiceLoader未找到任何服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71023598/