我面临一个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编译器插件运行的ServiceLoader.load(...)中使用AbstractProcessor时,同样的方法也无法奏效。处理器将返回一个空迭代器。要使它在注释处理器中的行为方式与上面的情况相同,需要做些什么?
发布于 2022-06-02 15:21:04
这个问题的THe解决方案是指定一个类加载器--似乎注释处理器使用的类加载器与我试图从其中加载服务的类不同。解决办法如下:
ServiceLoader.load(MyService.class, MyAnnotationProcessor.class.getClassLoader())https://stackoverflow.com/questions/71023598
复制相似问题