Создание 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 в пути к classам, поэтому некоторые из ссылок в JavaDocs не разрешены. Я должен найти способ получить все необходимые банки на пути к classам.

Другая проблема с подходом, который я взял, – это собирать пути к classам для всех вариантов сборки, а не выбирать их.

Для Android плагин 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.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 ,

С инструментами android gradle 1.10. + Получение SDK android SDK отличается от предыдущего. Вы должны изменить следующее:

 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 находятся в собственности 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) 

Вот обновленная версия, которая работала в 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

 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 ->
     если (variant.name.equals ( 'освобождение'))
         task ("generateJavadoc", тип: Javadoc) {
             описание "Generate Javadoc"
             source = android.sourceSets.main.java.srcDirs
 // println '=== source ==='
 // source.collect {relativePath (it)} .sort (). each {println it}
             ext.androidJar = "$ {android.sdkDirectory} / platform / $ {android.compileSdkVersion} /android.jar"
             classpath = files (variant.javaCompile.classpath.files) + файлы (ext.androidJar)
 // println '=== classpath ==='
 // classpath.collect {relativePath (it)} .sort (). each {println it}
         }
 }

Использование:

gradle generateJavadoc

  • Как создать пользовательские tags javadoc?
  • Как создать HTML-файлы Javadoc в Eclipse?
  • Получите исходные файлы jar, прикрепленные к Eclipse для зависимых от Maven зависимостей
  • Давайте будем гением компьютера.