簡體   English   中英

使用多個庫模塊聚合Javadoc for Android項目

[英]Aggregate Javadoc for Android project with multiple library modules

我已經瀏覽了幾乎整個互聯網,尋找一種方法,如何將包含單獨庫模塊的項目中的Javadoc聚合到單個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"] } } 

上面的配置為子項目的每個buildVariant添加了一個Javadoc生成任務。 此時,您可以通過鍵入單獨為每個模塊生成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. 要將每個子模塊的Javadoc聚合為單個子模塊,請在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 } } 

最后,將插件包含在插件定義下面的Project的build.gradle中的gradle配置中。

apply plugin: JavadocAggregationPlugin
  1. 通過執行此操作並重建gradle的配置,您應該能夠通過cli鍵入以下命令在指定的目錄中創建聚合的Javadoc:

     gradle aggregateJavadocs 

希望有所幫助。

有用的鏈接: Android Gradle DSL

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM