java - ServiceLoader 不加载新服务

标签 java maven module serviceloader

我的 ServiceLoader 不想加载我的新服务。我认为我已正确设置所有内容。

核心.主要

public class Main {
  public static void main(String[] args) {
      System.out.println("Before");
      Iterator<IService> services = ServiceLoader.load(IService.class).iterator();
      while (services.hasNext()) {
          IService service = services.next();
          System.out.println(service.sayHi());
      }
      System.out.println("After");
  }
}

核心.服务.I服务

package service;

public interface IService {
    String sayHi();
}

DbDataBuilder.builder.DbDataBuilder

package builder;

import service.IService;
public class DbDataBuilder implements IService {

    public DbDataBuilder() {
    }

    public String sayHi() {
        return "I am Data Builder";
    }
 }

META-INF/services/service.Iservice

builder.DbDataBuilder

Project structure

但是当我运行它时,控制台输出是:

Before
After

我做错了吗?

最佳答案

当构建器在运行时而不是编译时在类路径上时,ServiceLoader 很有用。您应该将具有编译范围依赖性的第三个模块添加到 Core 并将运行时范围依赖性添加到 DbDataBuilder,将 Main 移动到第三个模块并享受 ServiceLoader 功能

关于java - ServiceLoader 不加载新服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39894596/

相关文章:

java - 在 Ubuntu 上编译 OpenCV

java - 从不同的模块加载资源文件。 Maven 测试有效,maven install/package 无效

python - 使用类的实例

java - OpenNLP 分类器输出

java - 连接 Java 和 Quartz Composer

java - Swing,远程桌面异常

java.xml XMLConstants.FEATURE_SECURE_PROCESSING 无法解析或不是字段

java - 避免主要/次要版本与 Java/Maven 依赖项的冲突

objective-c - 为什么在 Swift 中继承自 NSObject 的类会变成 public?

javascript - 如何从 Node.js 模块内部引用该模块的上下文对象?