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())
我遇到了 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())