java - 在 Maven 依赖项中查找包中的所有类

标签 java maven classloader

我试图使用 the reflections library 从“scala”包中获取所有类,但没有成功(测试失败):

public static List<Class<?>> getClassesFromPackage(String packageName) {
    List<ClassLoader> classLoadersList = new LinkedList<ClassLoader>();
    classLoadersList.add(ClasspathHelper.contextClassLoader());
    classLoadersList.add(ClasspathHelper.staticClassLoader());
    classLoadersList.add(ClassLoader.getSystemClassLoader());

    Reflections reflections = new Reflections(new ConfigurationBuilder()
            .setScanners(new SubTypesScanner(false /* don't exclude Object.class */), new ResourcesScanner())
            .setUrls(ClasspathHelper.forClassLoader(classLoadersList.toArray(new ClassLoader[0])))
            .filterInputsBy(new FilterBuilder().include(FilterBuilder.prefix(packageName))));

    return reflections.getSubTypesOf(Object.class).stream().collect(Collectors.toList());
}

我的测试方法是:

@Test
public void classFinderTest() {
    String packageName = "scala";

    List<Class<?>> listClasses = ClassFinder.getClassesFromPackage(packageName);

    assertFalse("the list is empty", listClasses.isEmpty());
}

scala 库依赖项在我的 pom.xml 中声明:

<dependency>
    <groupId>org.scala-lang</groupId>
    <artifactId>scala-library</artifactId>
    <version>2.11.6</version>
</dependency>

我需要使用 java 代码执行此操作。

我想以编程方式获取属于某个特定包的所有类。例如,如果 packageName 是“scala”,我想要一个包含以下内容的列表:scala.Int、scala.Double、scala.Enumeration 等。

任何人都可以提供一些想法来找到解决方案吗?

最佳答案

一个工作测试类 (Test.java) 是

import java.util.Set;

import org.reflections.Reflections;
import org.reflections.scanners.SubTypesScanner ;

public class Test {
    public static Set<Class<?>> getClassesFromPackage(String packageName) {
        Reflections reflections = new Reflections(packageName, new SubTypesScanner(false));

        return reflections.getSubTypesOf(Object.class);
    }

    public static void main(String ... args) {
        for ( Class c: getClassesFromPackage("scala") ) {
            System.out.println(c.getName());
        }
    }
}

(在类路径中包含所有必需的库)。

使用 Reflections(String prefix, Scanner... scanners) 可以简化您的代码。

关于java - 在 Maven 依赖项中查找包中的所有类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33239604/

相关文章:

java - JQuery/AJAX 代码错误 - 在文本框中输入时未显示文本

java - 如何在 Web 应用程序中查找客户端系统 MAC 地址

java - 当我尝试 mvn appengine :update 时出现 409 冲突错误

java - 在tomcat上运行maven项目

java - 如何在Eclipse中查看maven项目的web内容

java - 如何在不重启 Tomcat 的情况下重新加载属性文件

java - Spark 操作中用户 lib jar 优先于 oozie 共享 lib

java - 用户 'root' @'localhost' 的访问被拒绝(使用密码 : YES) IN WAMPSERVER

Tomcat WebappClassloader 未被垃圾收集

java - 使用 Stream API 创建 Map<String, List<Object>> ,其中对列表的元素进行排序