Совокупный проект Javadoc для Android с несколькими библиотечными модулями

Я прошел почти весь Интернет в поисках способа объединения Javadocs в проект, состоящий из отдельных модулей библиотеки в один Javadoc.

Существует плагин, который, по-видимому, позволяет это сделать: https://github.com/nebula-plugins/gradle-aggregate-javadocs-plugin

Однако, если я запустил команду, указанную плагином, то Gradle найдет задачу и выполнит ее, но не будет создан выходной каталог.

Любая помощь, как построить один Javadoc из нескольких модулей, очень ценится.

Мне удалось заставить его работать некоторое время назад, извинившись за поздний ответ. Решение для агрегатируемого создания Javadoc заключается в следующем:

  1. В каждом из подпроектов, поддерживаемых в рамках проекта, создается задача, генерирующая Javadoc:

    android.libraryVariants.all { variant -> task("generate${variant.name.capitalize()}Javadoc", type: Javadoc) { destinationDir = project.file("$project.projectDir/javadoc/$project.PROJECT_NAME") //Project name in the Project's gradle.properties title = "A title of my project - $project.PROJECT_VERSION_NAME" //Project version name in the Project's gradle.properties description "Generates Javadoc for $variant.name." source = variant.javaCompile.source ext.androidJar ="${android.sdkDirectory}/platforms/${android.compileSdkVersion}/android.jar" classpath = files(variant.javaCompile.classpath.files) + files(ext.androidJar) + project.files(android.getBootClasspath().join(File.pathSeparator)) options { memberLevel = org.gradle.external.javadoc.JavadocMemberLevel.PUBLIC //change the modifier according to your needs links "http://docs.oracle.com/javase/8/docs/api/" linksOffline "http://d.android.com/reference", "${android.sdkDirectory}/docs/reference" } exclude '**/BuildConfig.java' exclude '**/R.java' } task("bundle${variant.name.capitalize()}Javadoc", type: Jar) { baseName = "Compass API - ($version)" description "Bundles Javadoc into zip for $variant.name." classifier = "javadoc" from tasks["generate${variant.name.capitalize()}Javadoc"] } } 

В приведенной выше конфигурации добавляется задача генерации Javadoc для каждого buildVariant вашего подпроекта. На этом этапе вы можете создавать Javadoc для каждого модуля отдельно, набрав

 gradle :myRootProject:mySubproject:generateDebugJavadoc gradle :myRootProject:mySubproject:generateReleaseJavadoc gradle :myRootProject:mySubproject:generateMyFancyFlavourDebugJavadoc gradle :myRootProject:mySubproject:generateMyFancyFlavourReleaseJavadoc 

Если вы используете JRE 8, следующая конфигурация отключает ошибки, вызванные doclint во время сборки Javadoc ( объяснение более подробно здесь )

  if (JavaVersion.current().isJava8Compatible()) { tasks.withType(Javadoc) { // disable the crazy super-strict doclint tool in Java 8 //noinspection SpellCheckingInspection options.addStringOption('Xdoclint:none', '-quiet') } } 
  1. Чтобы объединить Javadocs каждого подмодуля в один, создайте плагин для build.gradle который добавит задание в подмодуль частичное поколение Javadoc, которое вас интересует:

      class JavadocAggregationPlugin implements Plugin<Project> { static final String AGGREGATE_JAVADOCS_TASK_NAME = 'aggregateJavadocs' @Override void apply(Project project) { Project rootProject = project.rootProject rootProject.gradle.projectsEvaluated { Set<Project> librarySubprojects = getLibraryProjects(rootProject) if (!librarySubprojects.isEmpty()) { rootProject.task(AGGREGATE_JAVADOCS_TASK_NAME, type: Javadoc) { description = 'Aggregates Javadoc API documentation of all subprojects.' group = JavaBasePlugin.DOCUMENTATION_GROUP dependsOn librarySubprojects.generateReleaseJavadoc //please note that generateReleaseJavadoc is the name of the separate Javadoc generation task in each library module source librarySubprojects.generateReleaseJavadoc.source destinationDir rootProject.file("$rootProject.buildDir/docs/javadoc") //Javadoc destination directory classpath = rootProject.files(librarySubprojects.generateReleaseJavadoc.classpath) } } } } private Set<Project> getLibraryProjects(Project rootProject) { rootProject.subprojects.findAll { subproject -> subproject.plugins.findPlugin("com.android.library") } //In this case every library module is selected } } 

Наконец, включите ваш плагин в конфигурацию градиента в файле build.gradle проекта ниже вашего определения плагина.

 apply plugin: JavadocAggregationPlugin 
  1. Делая это и перестраивая конфигурацию gradle, вы должны иметь возможность создавать агрегированный Javadoc в указанном каталоге, введя следующую команду через cli:

     gradle aggregateJavadocs 

Надеюсь, что это поможет.

Полезная ссылка: Android Gradle DSL