Kotlin + dokka でマルチモジュールのJavadocを生成

環境

Android Studio 3.5
macOS 10.14.4
kotlin 1.3.50

対象のモジュール構成

以下のような構成のプロジェクトを想定し、lib1とlib2のJavadocをまとめて生成する。

モジュール 説明
app lib1とlib2に依存したアプリモジュール
lib1 Javadoc生成対象のライブラリモジュール
lib2 Javadoc生成対象のライブラリモジュール

dokka導入

GitHub - Kotlin/dokka: Documentation Engine for Kotlin を参考に、プロジェクトのルートのbuild.gradleに以下を記述する。

buildscript {
    ext.dokka_version = '0.9.18'
    repositories {
        jcenter()
    }
    dependencies {
        classpath "org.jetbrains.dokka:dokka-android-gradle-plugin:${dokka_version}"

    }
}

ドキュメント用のモジュールを追加

Javadoc生成対象のソースコードをまとめ上げるモジュールを作成して、sourceSetsにドキュメント生成対象のコードを追加する。
main.java.srdDir にソースセットを追加すると、appモジュールからライブラリのコードが正しく解決できなくなってしまったので、ドキュメント用のBuildTypeを定義してそこに追加するのがよさそう(以下の例では docs というBuildTypeを定義している)。

apply plugin: 'com.android.library'
apply plugin: 'kotlin-android'
apply plugin: 'org.jetbrains.dokka-android'

android {
    compileSdkVersion 28

    defaultConfig {
        minSdkVersion 19
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        consumerProguardFiles 'consumer-rules.pro'
    }

    buildTypes {
        // ドキュメント用のビルドタイプを定義する。これをしないとappモジュールからライブラリのコードをうまく解決できない。
        docs {}
    }

    sourceSets {
        // ドキュメント生成対象のコードをソースセットに追加する
        docs.java.srcDirs += '../lib1/src/main/java'
        docs.java.srcDirs += '../lib2/src/main/java'
    }

}

dokka {
    outputFormat = 'javadoc'
    sourceDirs = files('src/main')
    outputDirectory = "$project.rootDir/docs"
    linkMapping {
        // Unix based directory relative path to the root of the project (where you execute gradle respectively).
        dir = "src/main/kotlin" // or simply "./"

        // URL showing where the source code can be accessed through the web browser
        url = "https://github.com/cy6erGn0m/vertx3-lang-kotlin/blob/master/src/main/kotlin"
        //remove src/main/kotlin if you use "./" above

        // Suffix which is used to append the line number to the URL. Use #L for GitHub
        suffix = "#L"
    }
}

Javadoc生成

./gradlew dokka

サンプルコード

https://github.com/ergooo/DokkaMultiModuleSample

Javadoc生成結果

https://ergooo.github.io/DokkaMultiModuleSample/

参考

github.com

 
 
 
 

Kotlinイン・アクション

Kotlinイン・アクション