A complete Javadoc project for Android with several library modules

I went through almost the entire Internet in search of a way to combine Javadocs into a project consisting of separate library modules into one Javadoc.

There is a plugin that apparently allows this: https://github.com/nebula-plugins/gradle-aggregate-javadocs-plugin

However, if I run the command indicated by the Gradle plugin, it finds the task and executes it, but the output directory is not generated.

Any help in creating a single Javadoc from several modules that were highly appreciated.

+4
source share
1 answer

, . Javadoc :

  • , , , 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 gradle.properties
        title = "A title of my project - $project.PROJECT_VERSION_NAME" //Project version name in the Project 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
    }
    }
    

, gradle Project build.gradle .

apply plugin: JavadocAggregationPlugin
  1. gradle, Javadoc , cli:

    gradle aggregateJavadocs
    

, .

: Android gradle DSL

+5

Source: https://habr.com/ru/post/1598217/


All Articles