Gradle создает javado c, включая источники подпроектов - PullRequest
0 голосов
/ 09 июля 2020

У меня следующая структура проекта:

API
----client
--------subA
------------build.gradle
--------subB
------------build.gradle
--------build.gradle

И следующий build.gradle внутри клиентского подпроекта:

task clientApiDocs(type: Javadoc) {
    source = sourceSets.main.allJava
    destinationDir = reporting.file("javadoc")
    classpath = configurations.compile
    options.tags = ["stereotype"]
    options.addStringOption('Xdoclint:none', '-quiet')
}

assemble.dependsOn(clientApiDocs)

distributions {
    main {
        contents{
            from (clientApiDocs.outputs) {
                into 'javadoc/ClientJava'
            }
        }
    }
    createStartScripts {
        applicationName = 'ClientJava'
    }
}

Моя цель - включить javado c из подпроектов subA и subB внутри clientApiDocs. Как я могу это сделать?

1 Ответ

0 голосов
/ 09 июля 2020

Удивительная коллекция плагинов 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);
                }
            });
        })
    )
);
...