我正在尝试使用ServiceLoader运行示例应用程序。为此,我创建了两个JAR:
JAR 1) number-service.jar
META-INF/
META-INF/MANIFEST.MF
ok/
ok/service/
ok/service/NumberService.class
ok/main/
ok/main/App.class
META-INF/services/
META-INF/services/ok.service.NumberServiceMETA-INF/services/ok.service.NumberService只有一行:ok.service.impl.NumberServiceImpl
META-INF/MANIFEST.mf具有Main-Class: ok.main.App条目
并且ok.main.App加载ok.service.NumberService的提供程序
JAR 2) number-service-impl.jar
META-INF/
META-INF/MANIFEST.MF
ok/
ok/service/
ok/service/impl/
ok/service/impl/NumberServiceImpl.class包含ok.service.NumberService的实现
当命令以以下身份运行时:
java -cp lib/number-service-impl.jar -jar lib/number-service.jar
java -cp ".:lib/number-service-impl.jar" -jar lib/number-service.jar或者(两个JAR都在同一个目录中)
java -jar number-service.jar找不到提供程序。
Exception in thread "main" java.util.ServiceConfigurationError: ok.service.NumberService: Provider ok.service.impl.NumberServiceImpl not found
at java.base/java.util.ServiceLoader.fail(ServiceLoader.java:588)
at java.base/java.util.ServiceLoader.access$200(ServiceLoader.java:390)
at java.base/java.util.ServiceLoader$LazyClassPathLookupIterator.nextProviderClass(ServiceLoader.java:1206)
at java.base/java.util.ServiceLoader$LazyClassPathLookupIterator.hasNextService(ServiceLoader.java:1215)
at java.base/java.util.ServiceLoader$LazyClassPathLookupIterator.hasNext(ServiceLoader.java:1259)
at java.base/java.util.ServiceLoader$2.hasNext(ServiceLoader.java:1294)
at java.base/java.util.ServiceLoader$ProviderSpliterator.tryAdvance(ServiceLoader.java:1478)
at java.base/java.util.Spliterator.forEachRemaining(Spliterator.java:326)
at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:591)
at ok.main.App.main(App.java:9)无法弄清楚如何找不到provider类。请帮帮我!
提前谢谢。
发布于 2018-11-08 07:49:07
这是艾伦·贝特曼写的
对于初学者,META-INF/services/ok.service.NumberService应该与服务提供者实现一起位于JAR文件中(在本例中为number- service -impl.jar)。下一步是在类路径上同时需要number-service.jar和number-service-impl.jar。
你会发现
java -cp number-service.jar:number-service-impl.jar ok.main.App ...should工作。
https://stackoverflow.com/questions/49050419
复制相似问题