【发布时间】:2016-01-19 06:53:08
【问题描述】:
我试图使用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 等的列表。
谁能给我一些想法来找到解决方案?
【问题讨论】:
-
我不确定您到底在寻找什么,请查看stackoverflow.com/questions/15720822/…
-
@user Reflections 和 ClasspathHelper 类来自反射库:code.google.com/p/reflections,正如我在问题中指定的那样。
-
@user2985467 我已经看到该页面,但我不知道如何访问 scala-library.jar 因为它在我的 maven 依赖项中,所以我无法使用提供的解决方案在该页面中寻找答案。
标签: java maven classloader