Как я могу сгенерировать 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 не разрешены. Я должен найти способ получить все необходимые банки на пути к классам.
Другая проблема с подходом, который я взял, - это собирать пути к классам для всех вариантов сборки, а не выбирать один.
Ответ 1
Решение, о котором я закончил, выглядит следующим образом:
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)
}
}
Xavier Ducrohet подтвердил, что это способ сделать это (с оговорками) в группе adt-dev, https://groups.google.com/forum/#!searchin/adt-dev/javadoc/adt-dev/seRizEn8ICA/bafEvUl6mzsJ.
Ответ 2
Для 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
Ответ 3
Gradle 1.11 - Gradle Плагин 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'
}
}
Ответ 4
С инструментами android gradle 1.10. + получение файла SDK android отличается от предыдущего. Вы должны изменить следующее:
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'
}
}
Ответ 5
Андроидные банки, кажется, находятся в свойстве 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 только на основной ветке, поскольку вы можете полагаться на некоторые вещи из продуктов. Даже debug vs release может иметь некоторые отличия. Конечно, вы можете выбрать вариант по умолчанию. Таким образом, вы можете сделать что-то вроде
task javadoc(dependsOn: javadocDebug)
Ответ 6
Вот обновленная версия, которая работала в 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()}"]
}
}
Ответ 7
Я создал для этого плагин с открытым исходным кодом. Репозиторий GitHub
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/
Ответ 8
Я обнаружил, что это решение работает на 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
}
}
// ...
}
Ответ 9
Еще один
android.libraryVariants.all { variant ->
if(variant.name.equals('release'))
task("generateJavadoc", type: Javadoc) {
description "Generate Javadoc"
source = android.sourceSets.main.java.srcDirs
// println '=== source ==='
// source.collect { relativePath(it) }.sort().each { println it }
ext.androidJar = "${android.sdkDirectory}/platforms/${android.compileSdkVersion}/android.jar"
classpath = files(variant.javaCompile.classpath.files) + files(ext.androidJar)
// println '=== classpath ==='
// classpath.collect { relativePath(it) }.sort().each { println it }
}
}
Использование:
gradle generateJavadoc