我想构建一个可以加载的插件模块ServiceLoader
。这需要向META-INF/services
目录中添加一个文件,该文件以服务接口命名,并包含实现它的类的限定路径。然后你可以通过调用来加载这些服务ServiceLoader.load()
。
这是一个例子:
假设我们要提供一个名为org.example.plugins.PluginService
. 然后,我们在类中提供此服务的实现org.example.plugins.impl.ExamplePlugin
。
如果我们想要某种插件机制,我们可以创建一个包含实现的 JAR 文件。此 JAR 文件还必须包含该文件META-INF/services/org.example.plugins.PluginService
。此文件必须包含一行
org.example.plugins.impl.ExamplePlugin
使ServiceLoader
找到实现。如果该 JAR 文件在构建路径中,则可以通过调用加载插件
Iterator<PluginService> it = ServiceLoader.load(PluginService.class).iterator();
该迭代器将使您也可以访问ServiceLoader
.
META-INF
出于某种原因,Gradle默认不将文件包含到目录中。有没有办法让生成的 JAR 包含这样的文件?
我已经metaInf
在课堂上找到了方法Jar
。但是我不知道 groovy 足够好,无法自己找到解决方案。