Gradle пользовательский плагин, который должен получить доступ к источникам
Я написал плагин Gradle, где я ожидаю получить доступ к источникам проекта и сгенерировать некоторые файлы. Все работает, когда я запускаю свой проект из Java, однако, когда я пытаюсь сделать то же самое через плагин, он не работает. Не видит источников проекта.
Правда ли, что в gradle исходники не видны для buildscript и, следовательно, для плагинов? Можно ли сделать их доступными для плагина?
Этот класс используется для получения списка классов.
public class ClassFinder {
private final List<? extends Class<?>> classes;
public ClassFinder(String packageToScan) {
ClassPathScanningCandidateComponentProvider provider = new ClassPathScanningCandidateComponentProvider(false);
provider.addIncludeFilter(new RegexPatternTypeFilter(Pattern.compile(".*")));
Set<BeanDefinition> classes = provider.findCandidateComponents(packageToScan);
this.classes = classes.stream()
.map(bean -> {
try {
return Class.forName(bean.getBeanClassName());
} catch (ClassNotFoundException e) {
throw new IllegalStateException(e);
}
})
.collect(Collectors.toList());
}
...
}
Я могу использовать это либо в main
метод или в плагине. В main
он находит все классы в моем текущем проекте. В плагине ничего не находит (кроме библиотек).
1 ответ
То, что вы имеете в виду, это не исходные файлы, а уже скомпилированные классы в текущем пути к классам. Поскольку Gradle скомпилировал эти классы, ясно, что они не могут появляться в пути к классам среды выполнения Gradle и ее плагинов. Поэтому будет невозможно собрать классы вашего производственного кода из плагина Gradle. Однако было бы возможно использовать Gradle для вызова вашей функциональности из Gradle с помощью JavaExec
задача с классами из задачи компиляции на пути к классам.