在 Maven 依赖项中从包中查找所有 类
Find all classes from package in maven dependency
我试图使用 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 等
任何人都可以提供一些想法来找到解决方案吗?
一个工作测试class (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());
}
}
}
(在 class 路径中包含所有必需的库)。
使用Reflections(String prefix, Scanner... scanners)
可以简化您的代码。
我试图使用 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 等
任何人都可以提供一些想法来找到解决方案吗?
一个工作测试class (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());
}
}
}
(在 class 路径中包含所有必需的库)。
使用Reflections(String prefix, Scanner... scanners)
可以简化您的代码。