2015-04-16 4 views
20

Ich versuche ein aar zu erstellen, um auf jcenter zu veröffentlichen.Android Gradle javadoc Annotation existiert nicht

Die assembleRelease Aufgabe funktioniert ok, die javadoc Aufgabe funktioniert auch gut, aber die javadocJar Aufgabe gibt diesen Fehler:

/Users/martinmoreno/Projects/android-dev-utils/dev-utils/src/main/java/com/tinchoapps/devutils/BitmapUtils.java:11: error: package android.support.annotation does not exist 
import android.support.annotation.NonNull; 

Hier ist die (vereinfacht) gradle Datei:

apply plugin: 'com.android.library' 
apply plugin: 'com.github.dcendents.android-maven' 


android { 
    ... 
    buildTypes { 
     release { 
      minifyEnabled false 
      shrinkResources false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
      signingConfig signingConfigs.debug 
     } 
    } 
... 
} 

... 

dependencies { 
    compile fileTree(include: ['*.jar'], dir: 'libs') 
    compile 'com.android.support:support-annotations:20.0.0' 
    compile 'com.android.support:support-v4:22.0.0' 
} 

task sourcesJar(type: Jar) { 
    from android.sourceSets.main.java.srcDirs 
    classifier = 'sources' 
} 

task javadoc(type: Javadoc) { 
    source = android.sourceSets.main.java.srcDirs 
    classpath += project.files(android.getBootClasspath().join(File.pathSeparator)) 
    destinationDir = file("../javadoc/") 
} 

task javadocJar(type: Jar, dependsOn: javadoc) { 
    classifier = 'javadoc' 
    from javadoc.destinationDir 
} 

artifacts { 
    archives sourcesJar 
    archives javadocJar 
} 

Es scheint, Diese Beziehung hängt mit den Abhängigkeiten zusammen, weil sie einige Ausnahmen "Klasse nicht gefunden" für Klassen innerhalb der Importe enthält, aber nicht herausfinden kann, was falsch ist.

Irgendwelche Gedanken?

+0

Verwenden Sie Proguard in diesem Fall? – AndroidEx

+0

nop, Ich habe mit den Proguard-Einstellungen – Cheborra

+0

editiert Ich kann sehen, Sie bereits einige Lösungen ausprobiert :) Ist es kompilieren ohne Fehler, wenn Sie die Anmerkungen aus "BitmapUtils" entfernen? – AndroidEx

Antwort

14

Diese feste verschiedene ähnliche Fehler für mich:

Fügen Sie Folgendes build.gradle:

configurations { 
    javadocDeps 
} 

dependencies { 
    compile 'com.android.support:support-annotations:22.2.0' 
    javadocDeps 'com.android.support:support-annotations:22.2.0' 
    androidTestCompile 'junit:junit:4.+' 
    androidTestCompile 'com.jayway.android.robotium:robotium-solo:+' 
} 

In der JavaDoc Aufgabe, diese Zeile hinzu:

classpath += configurations.javadocDeps 
+0

Funktioniert wie ein Charme. Danke :) –

+0

Ja, aber welche 'javadoc' Aufgabe, um es zu setzen?Maven Install (via) plugin ruft 'javadoc' anstelle von' androidJavadoc' auf. Und Gradle erlaubt mir nicht, die ursprüngliche 'javadoc' Aufgabe zu modifizieren. Irgendwelche Ideen? – milosmns

+0

Erstellen Sie Ihre eigenen javadoc Aufgabe wie folgt aus: Aufgabe allJavadoc (DependsOn: [ 'assembleRelease'], Typ: Javadoc) { Classpath + = configurations.javadocDeps } –

3

Ich habe konfrontiert Dies während des Laufens ./gradlew install. Es trat auf, als JavaDocs kompiliert wurden (soweit ich das verstehe).

Ich habe gerade failOnError false zu task javadoc hinzugefügt.

Was ich verstehe ist, dass wir Fehler bei Warnungen vermeiden, dass Annotation-Bibliothek nicht gefunden werden konnte.

+0

Das hat bei mir funktioniert. Fehler für Unterstützungsbibliothek und andere abhängige Bibliotheken erhalten. – Fenil

6

Fügen Sie einfach diese Zeile in Ihrer javadoc Aufgabe (den letzten Teil bemerken: + configurations.compile):

classpath += project.files(android.getBootClasspath().join(File.pathSeparator)) + configurations.compile 

Der letzte Teil der Strecke sorgt dafür, die javadoc die Kompilierung Abhängigkeiten verwenden, um die Klassen zu lösen es für javadoc verwenden ist . An diesem Punkt sollte es nicht mehr scheitern.

+2

das war was für mich funktionierte! – jpage4500

1

von Markus Antwort Folgen, ist dies, wie ich es tun musste, damit es funktioniert:

configurations { 
    javadocDeps 
} 

dependencies { 
    compile 'com.android.support:support-annotations:25.3.1' 
    javadocDeps 'com.android.support:support-annotations:25.3.1' 
} 

tasks.whenTaskAdded { task -> 
    if (task.name == 'androidJavadocs') { 
     task.configure { 
      classpath += configurations.javadocDeps 
     } 
    } 
} 
+0

Das hat für mich funktioniert. Statt "androidJavadocs" habe ich 'javadoc' verwendet. – fernandospr

0

Seit der Einführung der in Android Gradle 3.0.0api und implementation Abhängigkeit Konfiguration compile ist veraltet. Um eine implementation Abhängigkeit in dem javadoc Classpath enthalten, ich Loius CADs answer aktualisiert:

task javadoc(type: Javadoc) { 
    source = android.sourceSets.main.java.srcDirs 
    configurations.implementation.setCanBeResolved(true) 
    classpath += project.files(android.getBootClasspath().join(File.pathSeparator)) + configurations.implementation 
} 

Ich erwarte nicht, dass dies die sauberste Lösung möglich sein. Es gibt wahrscheinlich einen Grund, warum configuration.implementation nicht standardmäßig auflösbar ist.