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 задача с классами из задачи компиляции на пути к классам.

Другие вопросы по тегам