如何使用 Dokka 为主源集和 androidTest 源集生成 Android 库的 Javadoc?

Har*_*rri 8 java android javadoc gradle dokka

我正在慢慢地将我的库项目从 Java 迁移到 Kotlin。我有一个要求,我还需要为 has 中的库和 Android 仪器测试提供 Javadoc。我无法再使用 Javadoc,因为它在看到 *.kt 文件时就会死掉。所以我转向多卡。

我的问题是我可以使用 Dokka 轻松生成 Javadoc,但仅限于主要源集。但我无法让它为我的仪器测试生成文档。

我在库构建 gradle 中有以下配置:

apply plugin: 'org.jetbrains.dokka'
...
dokkaJavadoc.configure {
    dokkaSourceSets {
        named("main") {
            // Main source set conf
            outputDirectory = file("dokkadoc/service-doc")
            includes.from(files("dokka_modules_test.md"))
            sourceRoots.from(file("src/main/java"))
        }
        named("androidTest") {
            // Test source set conf
            outputDirectory = file("dokkadoc/service-test-doc")
            includes.from(files("dokka_modules_test.md"))
            sourceRoots.from(file("src/androidTest/java"))
        }
        configureEach {
            // Shared conf for all source sets
            noAndroidSdkLink.set(false)
            includeNonPublic.set(false)
            skipEmptyPackages.set(true)
            reportUndocumented.set(true)
            skipDeprecated.set(false)
        }

    }
}
Run Code Online (Sandbox Code Playgroud)

在根 build.grade 中我导入:

buildscript {
    ..
    ext.dokka_version = '1.4.10.2'
    repositories {
        ..
    }
    dependencies {
        classpath "org.jetbrains.dokka:dokka-gradle-plugin:$dokka_version"
    }
}
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?或者我是否误解了,我无法以这种方式生成单独的Javadoc?我是否必须为所有构建变体生成扩展任务,例如:

libraryVariants.all { variant ->

..

def variantDokkadoc = task("dokkadoc${variant.name.capitalize()}", type: org.jetbrains.dokka.gradle.DokkaTask) {
...
}
Run Code Online (Sandbox Code Playgroud)

编辑:似乎当我为这样的测试部分创建一个单独的任务时,它就会执行以下操作:

// Dokka task for Service tests
task dokkaJavadocTests(type: org.jetbrains.dokka.gradle.DokkaTask) {
    dokkaSourceSets {
        named("main") {
            outputDirectory.set(file("dokkadoc/service-test-doc"))
            includes.from(files("dokka_modules_test.md"))
            sourceRoots.setFrom(file("src/main/java"))
            sourceRoots.from(file("src/androidTest/java"))

            noAndroidSdkLink.set(false)
            includeNonPublic.set(false)
            skipEmptyPackages.set(true)
            reportUndocumented.set(true)
            skipDeprecated.set(false)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

由于某种原因,我必须去

named("main")
Run Code Online (Sandbox Code Playgroud)

否则它会忽略测试类。

另外,我仍然无法生成 Javadoc 版本,它会生成 HTML 版本。如果我添加

outputFormat = "javadoc"
Run Code Online (Sandbox Code Playgroud)

然后它就忽略它

编辑2:

现在,我通过创建第二个测试任务并将它们都保留为 HTML 格式来解决这个问题。例如:

// Main dokka task for the library
dokkaHtml.configure {
    dokkaSourceSets {
        named("main") {
            // Main source set conf
            outputDirectory.set(file("dokkadoc/${project.ext.versionNameDokkaDoc}"))
            includes.from(files("dokka_modules_main.md"))

            noAndroidSdkLink.set(false)
            includeNonPublic.set(false)
            skipEmptyPackages.set(true)
            reportUndocumented.set(true)
            skipDeprecated.set(false)
        }
    }
}

// Dokka task for the library tests
task dokkaHtmlTests(type: org.jetbrains.dokka.gradle.DokkaTask) {
    dokkaSourceSets {
        named("main") {
            outputDirectory.set(file("dokkadoc/${project.ext.versionNameDokkaDocTests}"))
            includes.from(files("dokka_modules_test.md"))
            sourceRoots.setFrom(file("src/main/java"))
            sourceRoots.from(file("src/androidTest/java"))

            noAndroidSdkLink.set(false)
            includeNonPublic.set(false)
            skipEmptyPackages.set(true)
            reportUndocumented.set(true)
            skipDeprecated.set(false)
        }
    }
}

Run Code Online (Sandbox Code Playgroud)