加载特定类的jar文件夹

时间:2015-08-05 16:36:17

标签: java jar

我有一个服务器扫描包含一些jar的文件夹,并为每个jar获取类,它是AbstractPlugin类的子类。

我用这个罐子来帮助我:https://code.google.com/p/reflections 但是当我从

迁移时
    <dependency>
        <groupId>org.reflections</groupId>
        <artifactId>reflections</artifactId>
        <version>0.9.9-RC1</version>
    </dependency>

到:

    <dependency>
        <groupId>org.reflections</groupId>
        <artifactId>reflections</artifactId>
        <version>0.9.10</version>
    </dependency>

此代码不再有效:

        File pluginFolder = new File(PROP.getString("plugin.folder", "./plugins/"));

        for (File file : pluginFolder.listFiles()) {
            if (file.getName().endsWith(".jar")) {
                List<URL> jarsUrl = new ArrayList<>();
                URL jarUrl = file.toURL();
                jarsUrl.add(jarUrl);

                ClassLoader loader = URLClassLoader.newInstance(
                    jarsUrl.toArray(new URL[] {}), 
                    getClass().getClassLoader()
                );

                Reflections reflections = new Reflections(
                    ClasspathHelper.forClassLoader(loader),
                    new SubTypesScanner()
                );

                Store store = reflections.getStore();
                Set<String> pluginClass = store.getSubTypesOf(AbstractPlugin.class.getName());
            }
        }

在迁移之前,pluginClass会回复我所有在Abstract&#34;插件&#34;的jar中从AbstractPlugin中删除的类。文件夹中。

所以我尝试使用新代码来做同样的事情:

        File pluginFolder = new File(PROP.getString("plugin.folder", "./plugins/"));

        Arrays.asList(pluginFolder.listFiles())
            .stream()
            .filter(file -> file.getName().endsWith(".jar"))
            .forEach((file) -> {
                try {
                    System.out.println(file.getName());

                    Reflections reflections = new Reflections(
                        new ConfigurationBuilder()
                            .addUrls(file.toURI().toURL())
                            .addScanners(new SubTypesScanner(false))
                    );

                    System.out.println(reflections.getAllTypes());

                } catch (Exception e) {
                    LOG.error(e.getMessage(), e);
                }
            });

它也不起作用。有人可以帮我解决这个问题并为文件夹中的每个jar获取所有类型的AbstractPlugin类吗?

提前谢谢: - )

0 个答案:

没有答案