Java JBoss模块:如何从模块运行服务?

Java JBoss模块:如何从模块运行服务?,java,jboss-modules,Java,Jboss Modules,我试图从模块运行服务,但出现下一个错误: Exception in thread "main" java.util.ServiceConfigurationError: com.example.prototype.api.Service: Provider com.example.prototype.foo.FooService not a subtype at java.util.ServiceLoader.fail(ServiceLoader.java:239)

我试图从模块运行服务,但出现下一个错误:

Exception in thread "main" java.util.ServiceConfigurationError: com.example.prototype.api.Service: Provider com.example.prototype.foo.FooService not a subtype
        at java.util.ServiceLoader.fail(ServiceLoader.java:239)
        at java.util.ServiceLoader.access$300(ServiceLoader.java:185)
        at java.util.ServiceLoader$LazyIterator.nextService(ServiceLoader.java:376)
        at java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:404)
        at java.util.ServiceLoader$1.next(ServiceLoader.java:480)
        at java.lang.Iterable.forEach(Iterable.java:74)
        at com.example.prototype.api.Main.main(Main.java:19)
方法和体系结构描述:
我希望有一个带有模块的应用程序,其中一个模块描述接口,另一个模块实现接口。其思想是接口模块不应该知道任何关于具体实现的信息。
代码库位于

备注:
api模块
有一个
服务
接口。此外,它还有
Main
类,该类通过调用服务实现实例化
foo模块。
foo模块
实现了
服务
接口

API模块主类:

public class Main {

  public static void main(String[] args) throws Throwable {
    File root = new File("prototype");

    ModuleLoader loader = new ModuleLoader(new LocalModuleFinder(new File[]{root}));
    Module module = loader.loadModule("com.example.prototype.foo");
    ServiceLoader<Service> services = module.loadService(Service.class);

    System.out.println("Foo Service loaded");
    services.forEach(Service::sayWhatsup);
    System.out.println("Done!");
  }

}
据我所知,
Service.class
FooService
有不同的类加载器,这是因为出现了类兼容性问题

请帮忙解决这个问题。提前谢谢

<?xml version="1.0" encoding="UTF-8"?>

<module xmlns="urn:jboss:module:1.8" name="com.example.prototype.foo" version="1.0">
  <main-class name="com.example.prototype.foo.Main"/>
  <resources>
    <artifact name="com.example.prototype:foo-module:1.0"/>
  </resources>

  <dependencies>
    <module name="com.example.prototype.api"/>
  </dependencies>

  <provides>
    <service name="com.example.prototype.api.Service">
      <with-class name="com.example.prototype.foo.FooService"/>
    </service>
  </provides>

</module>