gradle - Aggregate Javadoc for Android project with multiple library modules -


i've gone through entire internet in search of way how aggregate javadocs in project consisting of separate library modules single javadoc.

there plugin apparently allows that: https://github.com/nebula-plugins/gradle-aggregate-javadocs-plugin

however, if run command specified plugin gradle finds task , executes no output directory generated.

any how build single javadoc multiple modules appreciated.

i managed working time ago, apologies late response. solution aggregatable javadoc creation following:

  1. in each of subprojects maintained within project create task generating 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 project's gradle.properties     title = "a title of project - $project.project_version_name" //project version name in project's gradle.properties     description "generates javadoc $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 modifier according 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 zip $variant.name."     classifier = "javadoc"     tasks["generate${variant.name.capitalize()}javadoc"]   } } 

the configuration above adds javadoc generation task each buildvariant of subproject. @ point can can generate javadoc each module separately typing

gradle :myrootproject:mysubproject:generatedebugjavadoc gradle :myrootproject:mysubproject:generatereleasejavadoc gradle :myrootproject:mysubproject:generatemyfancyflavourdebugjavadoc gradle :myrootproject:mysubproject:generatemyfancyflavourreleasejavadoc 

if use jre 8 following configuration disables errors raised doclint during javadoc build (explanation in greater detail here)

   if (javaversion.current().isjava8compatible()) {      tasks.withtype(javadoc) {          // disable crazy super-strict doclint tool in java 8          //noinspection spellcheckinginspection          options.addstringoption('xdoclint:none', '-quiet')      }     } 
  1. to aggregate javadocs of each submodules single 1 create plugin in build.gradle add task submodule partial javadoc generation of interested in:

     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 subprojects.'                  group = javabaseplugin.documentation_group                  dependson librarysubprojects.generatereleasejavadoc //please note generatereleasejavadoc name of 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 case every library module selected } } 

finally, include plugin gradle configuration in project's build.gradle below plugin definition.

apply plugin: javadocaggregationplugin 
  1. by doing , rebuilding gradle's configuration should able create aggregated javadoc in specified directory typing following command via cli:

    gradle aggregatejavadocs 

hope helps somehow.

helpful link: android gradle dsl


Comments