0

我有一个 Maven 应用程序,我喜欢使用该ServiceLoader机制来加载插件。

目前,我通过将依赖项添加到 pom 来实现这一点,以便依赖项 jar 在类路径中,并且 ServiceLoader 可以将其拾取。

但是,如果不在 pom 中声明依赖关系,如何实现呢?

我不喜欢用每个要使用的插件来改变 pom。

我该怎么做 - 或者插件 jar 必须始终在 pom 中?

4

1 回答 1

0

我瞎了...

我可以简单地使用URLClassloader来从我的应用程序的文件夹中加载所有插件 jar。

public class IntegrationServiceLoader {
    public static <T> ServiceLoader<T> loadIntegrations(Path path, Class<T> clazz) {
        List<URL> fileNames = new ArrayList<>();
        try (DirectoryStream<Path> directoryStream = Files.newDirectoryStream(path)) {
            for (Path each : directoryStream) {
                fileNames.add(each.toUri().toURL());
            }
        } catch (IOException ex) {
        }
        URL[] array = fileNames.stream().toArray(size -> new URL[size]);
        ClassLoader cl = new URLClassLoader(array, IntegrationServiceLoader.class.getClassLoader());
        return ServiceLoader.load(clazz, cl);
    }
}

这是有效的,现在适用于设置。

于 2016-05-23T22:08:11.247 回答