2015-10-20 1 views
1

я пытался получить все классы из пакета «Скалы» с использованием the reflections library, но без успеха (тест отсутствие):Найти все классы из пакета в Maven зависимости

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.Enumbereration и т. Д.

Может ли кто-нибудь предложить мне некоторые идеи, чтобы найти решение?

+1

Я не уверен, что именно вы ищете, проверьте это http://stackoverflow.com/questions/15720822/how-to-get-names-of-classes-inside-a-jar-file – Krish

+1

@user классы Reflections и ClasspathHelper взяты из библиотеки отражений: https://code.google.com/p/reflections/, как я указал в вопросе. – PedroHidalgo

+1

@ user2985467 Я уже вижу эту страницу, но я не знаю, как получить доступ к scala-library.jar, потому что это в моей зависимости от maven, поэтому я не могу использовать решение, обеспечивающее ответ на этой странице. – PedroHidalgo

ответ

2

Рабочий класс Test (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()); 
     } 
    } 
} 

(со всеми необходимыми LIBS в пути к классам).

Использование Reflections(String prefix, Scanner... scanners) может упростить ваш код.