Удивительная коллекция плагинов io.freefair
предоставляет плагин под названием io.freefair.aggregate-javadoc
, который должен соответствовать вашим потребностям:
Этот плагин добавляет в проект задачу aggregateJavadoc
, которая сгенерирует агрегированный javado c для самого проекта и всех его подпроектов (к которым применен плагин java
).
Просто добавьте следующий код в файл build.gradle
вашего root проект. Выберите версию на основе матрицы совместимости в проекте README
.
plugins {
id 'io.freefair.aggregate-javadoc' version <version>
}
Внутренне плагин использует обычную задачу типа Javadoc
. Он настраивается с использованием следующего кода :
project.allprojects(p ->
p.getPlugins().withType(JavaPlugin.class, jp ->
aggregateJavadoc.configure(aj -> {
TaskProvider<Javadoc> javadoc = p.getTasks().named(JavaPlugin.JAVADOC_TASK_NAME, Javadoc.class);
aj.source(javadoc.map(Javadoc::getSource));
if (aj.getClasspath() instanceof ConfigurableFileCollection) {
((ConfigurableFileCollection) aj.getClasspath()).from(javadoc.map(Javadoc::getClasspath));
}
else {
ConfigurableFileCollection classpath = project.files();
classpath.from(aj.getClasspath());
classpath.from(javadoc.map(Javadoc::getClasspath));
aj.setClasspath(classpath);
}
StandardJavadocDocletOptions options = (StandardJavadocDocletOptions) javadoc.get().getOptions();
StandardJavadocDocletOptions aggregateOptions = (StandardJavadocDocletOptions) aj.getOptions();
options.getLinks().forEach(link -> {
if (!aggregateOptions.getLinks().contains(link)) {
aggregateOptions.getLinks().add(link);
}
});
options.getLinksOffline().forEach(link -> {
if (!aggregateOptions.getLinksOffline().contains(link)) {
aggregateOptions.getLinksOffline().add(link);
}
});
options.getJFlags().forEach(jFlag -> {
if (!aggregateOptions.getJFlags().contains(jFlag)) {
aggregateOptions.getJFlags().add(jFlag);
}
});
})
)
);