当前位置: 首页 > 知识库问答 >
问题:

ServiceLoader.Load找不到Meta-INF/Services

闻人修平
2023-03-14

因此,在我的主程序中,我运行以下内容。

    ServiceLoader<ICustomDevice> loader = ServiceLoader.load(ICustomDevice.class);
    Iterator<ICustomDevice> devices = loader.iterator();
    System.out.println("Does it have devices? " + devices.hasNext());

它总是返回false,这意味着它没有找到'dummydevice'

在我的eclipse项目中,我在'src'处创建了一个名为META-INF的文件夹,在它下面创建了一个名为'services'的子文件夹。

我做对了吗?我看到的每一个关于SPI的例子都是关于加载JAR的。我不是在加载一个JAR,我是想在同一个项目中运行一个类。这个方法只适用于装入罐子吗?我希望我的程序支持加载本地子类和外部JAR。

共有1个答案

乐寒
2023-03-14

我将此添加为一个答案,但保留前面的“答案”以提供此变通方法的扩展代码详细信息。我正在努力报告之前的答案结果作为一个bug给谷歌。

因为Java.util.ServiceLoader的Android实现被破坏了(即使System.GetSecurityManager()==null,也总是使用AccessController.GetContext()填充内部Java.Security.AccessControlContext字段),所以解决方法是通过将OpenJDK for Java 8中找到的代码复制到您的类中来创建您自己的ServiceLoader类,在不使用import Java.util.*;的情况下从Java.util添加所需的特定导入,并在代码中调用该ServiceLoader(您将必须完全引用您创建的ServiceLoader以避免歧义)。

这不是优雅的,但它是一个功能变通的工作!此外,您还需要在ServiceLoader.load()调用中使用类加载器。这个类加载器必须是yourclass.class.getClassLoader()或者类的ClassLoader的子类加载器。

 类似资料:
  • 我无法在日食中运行简单的JMH基准测试。Maven 依赖项: Java代码: 运行结果: 线程“主要”中的异常 java.lang.运行时异常异常: 错误: 无法找到资源: /META-INF/BenchmarkList 在 org.openjdk.jmh.runner.runner.abstractResourceReader.getReaders(抽象资源读取器.java:96) 在 org.

  • 问题内容: 我无法在Eclipse中运行简单的JMH基准测试。Maven依赖项: Java代码: 运行结果: 线程“主”中的异常java.lang.RuntimeException:错误:无法找到资源:org.openjdk上的org.openjdk.jmh.runner.AbstractResourceReader.getReaders(AbstractResourceReader.java:9

  • “在Meta-INF/Spring.Factories中找不到自动配置类” 最小示例: 使用SpringInitializr(https://start.spring.io),在几秒钟内就可以创建一个迷你应用程序来复制这个问题。使用的SpringInitializr标记是:“web”和“vaadin”。 运行应用程序时使用 您将得到以下错误消息: “在Meta-INF/Spring.Factori

  • 在彻底搜索了这些论坛寻找答案后,我找不到一个类似于我的案例。 在使用maven生成WAR filer并部署我的服务器之后,每次我向需要创建DAO的API发送GET请求时,我都会在服务器控制台收到以下警告: 在类路径中找不到任何meta-inf/persistence.xml文件 和以下例外情况: 没有名为mim_ajuda的EntityManager的持久性提供程序 在进一步讨论之前,我已经搜索了

  • 我试图使用WildFly和Maven运行一个简单的EJB示例,但却停留在我应该创建一个持久性单元的阶段。因此,我创建了一个PostgreSQL数据库,配置了Wildfly数据源并编写了一个persistence.xml文件。但WAR似乎从不包含persistence.xml,所以每次尝试创建EntityManager时,我都会从Wildfly获得以下信息和错误: 11:55:57,664信息[or

  • 我知道关于这个问题还有其他问题,但没有一个解决方案对我有效。我正在使用maven在eclipse中构建一个java项目,我有我的持久性。src/main/resource/META_INF文件夹中的xml文件。但当我尝试安装mvn时,总是会出现以下错误: 从控制台输出来看,这似乎是由以下原因造成的: 这是我的persistence.xml文件: 我试着右键点击项目,并将META_INF文件夹添加到