Генерация JavaDocs с плагином Android Gradle
Как я могу сгенерировать JavaDocs для проекта Android, используя новую систему сборки Gradle?
Вот то, что я придумал, но это не работает.
task generateJavadoc(type: Javadoc) {
source = android.sourceSets.main.java.srcDirs
ext.cp = android.libraryVariants.collect { variant ->
variant.javaCompile.classpath.files
}
classpath = files(ext.cp)
}
Основная проблема заключается в том, что я не получаю соответствующий android.jar на пути к классам, поэтому некоторые ссылки в JavaDocs не разрешаются. Я должен найти способ получить все необходимые банки на пути к классам.
Другая проблема с подходом, который я выбрал, заключается в том, что он собирает пути к классам для всех вариантов сборки, а не выбирает один.
9 ответов
Решение, на котором я остановился, заключается в следующем:
android.libraryVariants.all { variant ->
task("generate${variant.name}Javadoc", type: Javadoc) {
description "Generates Javadoc for $variant.name."
source = variant.javaCompile.source
ext.androidJar = "${android.plugin.sdkDirectory}/platforms/${android.compileSdkVersion}/android.jar"
classpath = files(variant.javaCompile.classpath.files) + files(ext.androidJar)
}
}
Ксавье Дюкрохет подтвердил, что это способ сделать это (с оговорками) в группе adt-dev, https://groups.google.com/forum/#!searchin/adt-dev/javadoc/adt-dev/seRizEn8ICA/bafEvUl6mzsJ,
Для Android Gradle плагин 1.1.2+ (com.android.tools.build:gradle:1.1.2+)
libraryVariants - больше не работает
использовать:
task javadoc(type: Javadoc) {
source = android.sourceSets.main.java.srcDirs
classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
destinationDir = file("../javadoc/")
failOnError false
}
destinationDir = file ("../ javadoc /") - найти javadocs в корне каталога проекта (таким образом плагин jenkins javadoc может найти его и показать на специальной панели документов)
failOnError false - для подавления предупреждений, которые могут вызвать сбой сборки на jenkins
Gradle 1.11 - Gradle Plugin 0.10.0
замещать android.plugin.sdkDirectory
от android.sdkDirectory
android.libraryVariants.all { variant ->
task("generate${variant.name}Javadoc", type: Javadoc) {
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)
options.links("http://docs.oracle.com/javase/7/docs/api/");
options.links("http://d.android.com/reference/");
exclude '**/BuildConfig.java'
exclude '**/R.java'
}
}
С инструментами Android Gradle 1.10.+ Получение Android SDR Dir отличается от ранее. Вы должны изменить следующее:
android.sdkDirectory
вместо
android.plugin.sdkDirectory
Это полное решение проблемы:
android.applicationVariants.all { variant ->
task("generate${variant.name.capitalize()}Javadoc", type: Javadoc) {
title = "Documentation for Android $android.defaultConfig.versionName b$android.defaultConfig.versionCode"
destinationDir = new File("${project.getProjectDir()}/doc/compiled/", variant.baseName)
source = variant.javaCompile.source
ext.androidJar = "${android.sdkDirectory}/platforms/${android.compileSdkVersion}/android.jar"
classpath = files(variant.javaCompile.classpath.files) + files(ext.androidJar)
description "Generates Javadoc for $variant.name."
options.memberLevel = org.gradle.external.javadoc.JavadocMemberLevel.PRIVATE
options.links("http://docs.oracle.com/javase/7/docs/api/");
options.links("http://developer.android.com/reference/");
exclude '**/BuildConfig.java'
exclude '**/R.java'
}
}
Фляги андроида вроде бы в собственности android.plugin.runtimeJarList
, Хотя это нигде не задокументировано, поэтому может сломаться в любое время.
Я усовершенствовал ваше решение для работы с вариантами сборки:
android.applicationVariants.all { variant ->
def name = variant.name
task "javadoc$name"(type: Javadoc) {
description = "Generates javadoc for build $name"
destinationDir = new File(destinationDir, variant.baseName)
source = files(variant.javaCompile.source)
classpath = files(android.plugin.runtimeJarList, variant.javaCompile.classpath)
exclude '**/R.html', '**/R.*.html'
}
}
Как правило, не имеет смысла делать Javadoc только для основной ветви, так как вы можете полагаться на некоторые вещи из ароматов продукта. Даже отладка против выпуска может иметь некоторые различия. Конечно, вы можете просто выбрать вариант по умолчанию для использования. Таким образом, вы могли бы сделать что-то вроде,
task javadoc(dependsOn: javadocDebug)
Вот обновленная версия, которая работала в 2014 году:
android.libraryVariants.all { variant ->
def name = variant.buildType.name
if (name.equalsIgnoreCase("debug")) {
return; // Skip debug builds.
}
task("javadoc${variant.name.capitalize()}", type: Javadoc) {
description "Generates Javadoc for $variant.name."
source = variant.javaCompile.source
ext.androidJar = files(plugins.findPlugin("com.android.library").getBootClasspath())
classpath = files(variant.javaCompile.classpath.files) + ext.androidJar
exclude '**/internal/**'
failOnError false
}
task("bundleJavadoc${variant.name.capitalize()}", type: Jar) {
description "Bundles Javadoc into zip for $variant.name."
classifier = "javadoc"
from tasks["javadoc${variant.name.capitalize()}"]
}
}
Я сделал плагин с открытым исходным кодом для этого. GitHub Repository
buildscript {
repositories {
maven {
url "https://plugins.gradle.org/m2/"
}
}
dependencies {
classpath "gradle.plugin.com.vanniktech:gradle-android-javadoc-plugin:0.2.1"
}
}
Добавьте эту строку в ваш build.gradle
apply plugin: "com.vanniktech.android.javadoc"
Затем просто выполните одно из следующих действий:
./gradlew generateDebugJavadoc
./gradlew generateReleaseJavadoc
Документацию по Java можно найти в module/javaDoc/
Я обнаружил, что это решение работает на плагине Gradle 1.3.1, если у вас разные вкусы продукта.
Это создаст задачи Gradle для генерации Javadoc для каждого вида продукта и типа сборки. Например, если имя модуля app
и у вас есть production
а также dev
вкус продукта и debug
а также release
типы сборки, у вас будут следующие задачи Gradle:
- : Приложение: generateDevDebugJavadoc
- : Приложение: generateDevReleaseJavadoc
- : Приложение: generateProductionDebugJavadoc
- : Приложение:generateProductionReleaseJavadoc
app/build.gradle
android {
// ...
applicationVariants.all { variant ->
// create tasks to generate Javadocs
task("generate${variant.name.capitalize()}Javadoc", type: Javadoc) {
source = variant.javaCompile.source
classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
// choose the destination that works best for you here
// I chose this particular directory because Jenkins pulls reports
// from this directory already if you need to have the output
// folder be parameterized for the build variant, use
// "build/outputs/docs/javadoc-${variant.name}/" instead and it'll
// be in `javadoc-productionRelease` for example
destinationDir = file("build/outputs/docs/javadoc/")
// the name that will appear in the docs
title = rootProject.name
// you will probably get errors from using the @annotations and
// the support library, so just turn off failing for errors
failOnError false
}
}
// ...
}
Еще один
android.libraryVariants.all {вариант -> если (variant.name.equals('освобождение')) task("generateJavadoc", тип: Javadoc) { описание "Генерация Javadoc" source = android.sourceSets.main.java.srcDirs // println '=== source ===' // source.collect {lativePath(it) }.sort().each { println it } ext.androidJar = "${android.sdkDirectory}/platform /${android.compileSdkVersion}/android.jar" classpath = файлы (option.javaCompile.classpath.files) + файлы (ext.androidJar) // println '=== classpath ===' // classpath.collect {lativePath(it) }.sort().each { println it } } }
Использование:
Gradle GenerateJavadoc