[英]Aggregate Javadoc for Android project with multiple library modules
我已經瀏覽了幾乎整個互聯網,尋找一種方法,如何將包含單獨庫模塊的項目中的Javadoc聚合到單個Javadoc中。
有一個插件顯然允許這樣做: https : //github.com/nebula-plugins/gradle-aggregate-javadocs-plugin
但是,如果我運行插件指定的命令,Gradle會找到該任務並執行它但不會生成輸出目錄。
任何幫助如何從多個模塊構建單個Javadoc非常感謝。
我設法讓它在不久前工作,為遲到的回應道歉。 可聚合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'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')
}
}
要將每個子模塊的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
通過執行此操作並重建gradle的配置,您應該能夠通過cli鍵入以下命令在指定的目錄中創建聚合的Javadoc:
gradle aggregateJavadocs
希望有所幫助。
有用的鏈接: Android Gradle DSL
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.