Я пытаюсь написать плагин Maven, который сканирует классы приложений в поисках реализации определенного интерфейса (это могут быть также классы с некоторой аннотацией) и основывается на результате, генерирующем некоторый код. Я успешно реализовал плагин, работающий на этапе создания источников и записи исходного кода в каталог созданных источников.
Проблема заключается в сканировании пути к классам для конкретных реализаций / классов интерфейса с некоторой аннотацией.
Я использую библиотеку Reflections для сканирования классов следующим образом:
private Set<Class< ? extends MyInterface >> scan(final String packageName) {
final Reflections reflections = new Reflections(packageName);
return reflections.getSubTypesOf(MyInterface.class);
}
К сожалению, этот метод возвращает пустой набор. Когда я печатаю свой путь к классу в классе, расширяющем org.apache.maven.plugin.AbstractMojo
(то же самое, в котором я использую Reflections ), я получаю следующий результат:
/ дома / pd5108 / апач-Maven-2.2.1 / загрузки / classworlds-1.1.jar
Классы, которые я хочу найти с помощью Reflections, существуют в зависимых JAR-файлах, а также в модуле, в котором настроен плагин. Глядя на распечатанный путь к классам, кажется, что на данном этапе (фаза создания источников) определенные в maven зависимости еще не доступны в classpath - возможно, они будут добавлены на следующих этапах. Это правда? Есть ли другой подход, который я могу использовать?
Вот как распечатывается classpath:
URL[] urls = ((URLClassLoader)sysClassLoader).getURLs();
for(int i=0; i< urls.length; i++) {
System.out.println(urls[i].getFile());
}