1
我試圖使用the reflections library的「斯卡拉」包得到所有的類,但沒有成功(測試失敗):查找包中的所有類的行家依賴
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>
我的東東d使用java代碼來做到這一點。
我想以編程方式獲取屬於某個特定軟件包一部分的所有類。例如,如果packageName是「scala」,我想要一個包含以下內容的列表:scala.Int,scala.Double,scala.Enumeration等。
任何人都可以提供一些想法來找到解決方案嗎?
我不確定你在找什麼,查看這個http://stackoverflow.com/questions/15720822/how-to-get-names-of-classes-inside-a-jar-file – Krish
@user Reflections和ClasspathHelper類來自反射庫:https://code.google.com/p/reflections/,正如我在問題中指定的那樣。 – PedroHidalgo
@ user2985467我已經看到那個頁面,但我不知道如何訪問scala-library.jar,因爲它位於我的maven依賴項中,所以我不能使用解決方案在該頁面中提供答案。 – PedroHidalgo