Gradle, Javadoc и Android-документация

Теперь я использую Gradle для всех своих проектов и даже для генерации javadoc.

android.libraryVariants.all { variant ->

    task("generate${variant.name}Javadoc", type: Javadoc) {
        title = "$name $version API"
        source = variant.javaCompile.source
        ext.androidJar = "${android.plugin.sdkDirectory}/platforms/${android.compileSdkVersion}/android.jar"
        ext.googlePlayServicesJar = "${android.plugin.sdkDirectory}/extras/google/google_play_services/libproject/google-play-services_lib/libs/google-play-services.jar"
        classpath = files(variant.javaCompile.classpath.files, ext.androidJar, ext.googlePlayServicesJar)
        options.links("http://docs.oracle.com/javase/7/docs/api/");
        options.links("http://d.android.com/reference/");
        //options.linksOffline("http://d.android.com/reference", "${android.plugin.sdkDirectory}/docs/reference");
        exclude '**/BuildConfig.java'
        exclude '**/R.java'
    }

}

С этим кодом у меня все работает, кроме одного: обычные объекты API Android, такие как Activity, Bitmap и т.д. Ссылки Java работают нормально.

В итоговой сгенерированной документации не ссылка на http://d.android.com/reference. Я пробовал обе версии options.links() и options.linksOffline() без успеха.

ИЗМЕНИТЬ

Благодаря @ejb проблема заключалась в том, что вы не можете одновременно предоставить несколько options.links(). Поэтому я использовал как options.links() для документации Java, так и options.linksOffline() для документации по Android:

options {
    links("http://docs.oracle.com/javase/7/docs/api/");
    linksOffline("http://d.android.com/reference", "${android.plugin.sdkDirectory}/docs/reference");
    //stylesheetFile = new File(projectDir, "stylesheet.css");
}

Ответ 1

Мне удалось успешно связаться с http://d.android.com/reference, используя следующий фрагмент, который функционально является тем, что у вас есть (насколько я могу судить).

 android.libraryVariants.all { variant -> 
   task("generate${variant.name.capitalize()}Javadoc", type: Javadoc) {
     // title = ''
     // description = ''
     source = variant.javaCompile.source 
     classpath = files(variant.javaCompile.classpath.files, project.android.getBootClasspath()) 
     options { 
       links "http://docs.oracle.com/javase/7/docs/api/" 
       linksOffline "http://d.android.com/reference","${android.sdkDirectory}/docs/reference" 
     } 
     exclude '**/BuildConfig.java' 
     exclude '**/R.java' 
   } 
 }

Итак, здесь есть что-то еще.

Вы должны создать javadoc в автономном режиме, так как не кажется, что package-list доступен на пути веб-службы. Возможно, дважды проверьте, что у вас на самом деле есть документы, загруженные локально, и убедитесь, что в каталоге /[android-sdk]/docs/reference есть package-list.

Если вы все еще не можете понять это, возможно, вы можете опубликовать вывод.

Еще одна вещь, которую вы можете проверить, - это ./build/tmp/[taskname]/javadoc.options, head указанного файла должны отображать соответствующие параметры, которые необходимо установить. Вещи для проверки включали бы правильное включение android.jar в -classpath и наличие ссылокOffline с ожидаемыми аргументами: -linksoffline extDocURL packageListLoc

javadoc.options должен иметь обе опции только с соответствующими аргументами:

-linksoffline 'http://d.android.come/reference' '[sdkDir]/docs/reference'
-links 'http://docs.oracle.com/javase/7/docs/api/' 

EDIT: android.getBootClasspath() лучше, благодаря P-chan.

Ответ 2

Для плагина Android Gradle 1.1. 2+ (com.android.tools.build:gradle:1.1.+)

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 JavaDocs

Doxygen - инструмент для перекрестных ссылок.

может быть запущен из пользовательского интерфейса или терминала: http://www.doxygen.nl/manual/doxygen_usage.html


Генерация javadoc доступного инструмента броска java: ' javadoc '

запустить из командной строки:

javadoc -d docs -sourcepath app/src/main/java -subpackages com

документы - папка назначения