Список всех интерфейсов в пакете в файле jar
Здравствуйте, stackru'ers! Я пытаюсь перечислить все классы из интерфейса в конкретном пакете. Я столкнулся с несколькими решениями и попробовал следующее:
Используя отражения:
AllCommands = new ArrayList<ICommand>();
Reflections reflections = new Reflections(this.getClass().getPackage().getName());
commandClasses = reflections.getSubTypesOf(ICommand.class);
for (Class<? extends ICommand> c :commandClasses){
AllCommands.add((ICommand)c.newInstance());
}
Используя extcos:
AllCommands = new ArrayList<ICommand>();
ComponentScanner scanner = new ComponentScanner();
scanner.getClasses(new ComponentQuery() {
@Override
protected void query() {
select().
from(this.getClass().getPackage().getName()).
andStore(thoseImplementing(ICommand.class).into(commandClasses)).
returning(none());
}
});
for (Class<? extends ICommand> c :commandClasses){
AllCommands.add((ICommand)c.newInstance());
}
Оба решения успешно перечисляют все мои классы при отладке в NetBeans (7.3), но когда я компилирую jar и выполняю его, коллекции commandClasses, кажется, остаются пустыми. Я не привык к Java, но я думаю, что это связано с classpath и временем отладки, принимая классы из папки \target\classes, а не из jar.
Может кто-нибудь помочь мне с решением, которое позволило бы мне перечислить классы в.jar? Возможно ли, что this.getClass(). GetPackage(). GetName() просто должен измениться на что-то, что указывает на банку?
1 ответ
Я сам понял это. Используя this.getClass(). GetPackage(). GetName(), поскольку Packagename указывает только на файлы в папке классов, чтобы ссылаться на классы в банке, которые мне нужны для замены "." в '/'. В любом случае, спасибо.