сканирование пути к классам Java в плагине maven

Я пытаюсь написать некий плагин Maven, который сканирует классы приложений в поисках реализации определенного интерфейса (это может быть классы с некоторой аннотацией) и на основе результата, генерирующего некоторый код. Я успешно реализовал плагин, работающий на этапе генерации источников и записывающий исходный код в каталог сгенерированных источников.

Проблема заключается в сканировании пути к классам для конкретных реализаций / классов интерфейса с некоторыми аннотациями.Я использую библиотеку Reflections для сканирования классов следующим образом:

private Set> scan(final String packageName) {
  final Reflections reflections = new Reflections(packageName);  
  return reflections.getSubTypesOf(MyInterface.class);
}

К сожалению, этот метод возвращает пустой набор. Когда я печатаю свой путь к классам в классе, расширяющем org.apache.maven.plugin.AbstractMojo (то же самое, в котором я использую Reflections ), я получаю следующий результат:

/home/pd5108/apache-maven-2.2.1/boot/classworlds-1.1.jar

Классы, которые я хочу найти с помощью Reflections, существуют в зависимых JAR-файлах, а также в модуле, в котором настроен плагин. Глядя на распечатанный путь к классам, кажется, что на этом этапе (этап генерации источников) зависимости, определенные в maven, еще не доступны в пути к классам - вероятно, они будут добавлены на следующих этапах. Это правда? Могу ли я использовать какой-либо другой подход?

Путь к классам распечатывается следующим образом:

URL[] urls = ((URLClassLoader)sysClassLoader).getURLs();

for(int i=0; i< urls.length; i++) {
  System.out.println(urls[i].getFile());
}

11
задан omnomnom 26 January 2012 в 16:06
поделиться