GradleでJavaDocを出力する

ターミナルからコマンドでJavaDocを出力できるようにしてみる。

build.gradleの修正

JavaDocを出力したい対象(moduleとか)のbuild.gradleに以下を追加。

android.libraryVariants.all { variant ->

    if (variant.name == "debug") {
        return
    }

    task("generateJavadoc", type: Javadoc) {
        title = "My JavaDoc"
        description "Generates JavaDoc."
        source = variant.javaCompile.source
        ext.androidJar =
                "${android.sdkDirectory}/platforms/${android.compileSdkVersion}/android.jar"
        classpath = files(variant.javaCompile.classpath.files) + files(ext.androidJar)
        options.links("http://docs.oracle.com/javase/7/docs/api/");
        options.links("http://d.android.com/reference/");
        exclude '**/BuildConfig.java'
        exclude '**/R.java'
    }
}

確認

tasksで確認。「Other tasks」にgenerateJavadocが追加されてる。

./gradlew tasks
Other tasks
-----------
generateJavadoc - Generates JavaDoc.

出力

コマンドを実行して出力する。

./gradlew generateJavadoc

文字化けを直す

charsetをutf-8にしてやる。optionsのcharSetを使えば良い。

android.libraryVariants.all { variant ->

    if (variant.name == "debug") {
        return
    }

    task("generateJavadoc", type: Javadoc) {
        title = "My JavaDoc"
        description "Generates Javadoc"
        source = variant.javaCompile.source
        ext.androidJar =
                "${android.sdkDirectory}/platforms/${android.compileSdkVersion}/android.jar"
        classpath = files(variant.javaCompile.classpath.files) + files(ext.androidJar)
        options.links("http://docs.oracle.com/javase/7/docs/api/");
        options.links("http://d.android.com/reference/");
        options.charSet("utf-8")
        exclude '**/BuildConfig.java'
        exclude '**/R.java'
    }
}

出力先

デフォルトでは、build/docs/javadoc以下に出力される。destinationDirを指定すれば任意の出力先を指定できる。

自動化

コマンドで完結するので自動化できる。masterにマージされるとJavaDocを出力して、GitHubPagesとかに上げるまで自動化すると良さそう。

追記

publicのクラス、メソッドのみJavaDocに出力したいので、showFromPublicを追加してみた。

android.libraryVariants.all { variant ->

    if (variant.name == "debug") {
        return
    }

    task("generateJavadoc", type: Javadoc) {
        title = "My JavaDoc"
        description "Generates Javadoc"
        source = variant.javaCompile.source
        ext.androidJar =
                "${android.sdkDirectory}/platforms/${android.compileSdkVersion}/android.jar"
        classpath = files(variant.javaCompile.classpath.files) + files(ext.androidJar)
        options.links("http://docs.oracle.com/javase/7/docs/api/");
        options.links("http://d.android.com/reference/");
        options.charSet("utf-8")
        options.showFromPublic()
        exclude '**/BuildConfig.java'
        exclude '**/R.java'
    }
}

これでpublicのクラス、メソッドのみ出力できた。

参考