gpt4 book ai didi

java - 简单的 ServiceLoader - java.util.ServiceConfigurationError ... 提供者 ... 未找到

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:09:00 25 4
gpt4 key购买 nike

我正在尝试使用 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.NumberService

META-INF/services/ok.service.NumberService 有一行:ok.service.impl.NumberServiceImpl

META-INF/MANIFEST.mfMain-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)

无法弄清楚提供程序类是如何定位的。请帮忙!

提前致谢。

最佳答案

[这是来自艾伦贝特曼]

对于初学者来说,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 

...应该可以。

关于java - 简单的 ServiceLoader - java.util.ServiceConfigurationError ... 提供者 ... 未找到,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49050419/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com