使用 2 个补充模块让一个简单的 ServiceLoader 在 Java 中工作
Getting a simple ServiceLoader to work in Java using 2 supplementary Modules
我对使用 ServiceLoader 还很陌生,我正在尝试建立一个非常简单的示例 运行。
目前有 4 个模块:BLCore、BLInterface、BLMod1、BLMod2
BLCore depends on: BLInterface, BLMod1, BLMod2
BLInterface depends on: Nonne
BLMod1 depends on: BLInterface
BLMod2 depends on: BLInterface
BLCore包含main方法,包含以下内容:
import java.util.ServiceLoader;
public class Main {
public static void main(String[] args) {
for(BeanInterface val : ServiceLoader.load(BeanInterface.class)){
System.out.println("You are a "+val.getName());
}
}
}
并且 BLInterface 有一个 String 方法,它只打印出一个名字左右。
结构如下:
代码可以编译,但是 ServiceLoader 没有检测到 Module1 和 Module2,有什么想法吗?
----状态----
已删除所有错误,但仍然无法正常工作。
您应该使用包而不是默认包。例如 com.example
.
在Java8(排除模块问题):
- 在
BLMod1
项目中,META-INF/services/com.example.BeanInterface
必须包含com.example.Module1
- 在
BLMod2
项目中,META-INF/services/com.example.BeanInterface
必须包含com.example.Module2
- 在
BLCore
配置中(Maven、Gradle 甚至你的 IDE),你必须确保引用 BLMod1
和 BLMod2
:它必须执行 main. 时在 class 路径中可用
- 确保
Module1
和 Module2
有一个 public 构造函数。
如果您使用的是 Java 9++,您可能还需要在 module-info.java
:
中添加适当的行
module com.example.module1 {
provides com.example.BeanInterface
with com.example.Module1;
}
这就是包的用处:如果没有合适的包,您可能无法使用模块。
您可能还想为此阅读 Java文档:https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/ServiceLoader.html
我对使用 ServiceLoader 还很陌生,我正在尝试建立一个非常简单的示例 运行。
目前有 4 个模块:BLCore、BLInterface、BLMod1、BLMod2
BLCore depends on: BLInterface, BLMod1, BLMod2
BLInterface depends on: Nonne
BLMod1 depends on: BLInterface
BLMod2 depends on: BLInterface
BLCore包含main方法,包含以下内容:
import java.util.ServiceLoader;
public class Main {
public static void main(String[] args) {
for(BeanInterface val : ServiceLoader.load(BeanInterface.class)){
System.out.println("You are a "+val.getName());
}
}
}
并且 BLInterface 有一个 String 方法,它只打印出一个名字左右。
结构如下:
代码可以编译,但是 ServiceLoader 没有检测到 Module1 和 Module2,有什么想法吗?
----状态---- 已删除所有错误,但仍然无法正常工作。
您应该使用包而不是默认包。例如 com.example
.
在Java8(排除模块问题):
- 在
BLMod1
项目中,META-INF/services/com.example.BeanInterface
必须包含com.example.Module1
- 在
BLMod2
项目中,META-INF/services/com.example.BeanInterface
必须包含com.example.Module2
- 在
BLCore
配置中(Maven、Gradle 甚至你的 IDE),你必须确保引用BLMod1
和BLMod2
:它必须执行 main. 时在 class 路径中可用
- 确保
Module1
和Module2
有一个 public 构造函数。
如果您使用的是 Java 9++,您可能还需要在 module-info.java
:
module com.example.module1 {
provides com.example.BeanInterface
with com.example.Module1;
}
这就是包的用处:如果没有合适的包,您可能无法使用模块。
您可能还想为此阅读 Java文档:https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/ServiceLoader.html