Was macht Gradle transitive = true
genau? Dies geht aus der Gradle-Dokumentation nicht hervor . Dies ist im Kontext von compile
innen build.gradle
. In meinem Fall bin ich auf die Crashlytics von Android angewiesen.
compile('com.crashlytics.sdk.android:crashlytics:2.2.2@aar') {
transitive = true;
}
Mehrere Gradle-Dokumente ( hier und hier ) implizieren, dass "transitiv" standardmäßig "true" ist. Das Entfernen transitive = true
führt jedoch dazu, dass (insbesondere KitGroup
) keine transitiven Abhängigkeiten eingeführt werden .
class file for io.fabric.sdk.android.KitGroup not found
Die Dokumente sagen, dass es standardmäßig true ist, aber das tatsächliche Verhalten scheint das Gegenteil zu sein.
Ich verwende Gradle 2.2.1. Vielleicht hat sich das Verhalten zwischen 2.2 und 2.4 geändert?
Bearbeiten : Verwandte Transitive Abhängigkeiten, die für eine Bibliothek mit Gradle nicht aufgelöst wurden
quelle
Antworten:
Sie verwenden die
@aar
Notation.Dies bedeutet, dass Sie nur das aar-Artefakt und keine Abhängigkeiten herunterladen möchten.
Sie können diesen Teil der Dokumentation überprüfen :
Überprüfen Sie den
1.4.1.2. Artifact only notation
Abschnitt:Verwenden Sie die
@aar
Notation, wenn Sie die Abhängigkeiten herunterladen möchten, und fügen Sie sie hinzutransitive=true
.Ich würde erwarten, dass das Weglassen von @aar ohne Hinzufügen des transitiven Attributs funktioniert.
quelle
Allgemeiner: Durch die Einstellung
transitive = false
in dercrashlytics
Bibliothek ignoriert gradle alle voncrashlytics
(= "transienten Bibliotheken") benötigten Bibliotheken und lädt sie nicht herunter und verknüpft sie nicht.Sie müssten entweder manuell die erforderlichen Bibliotheken zu Ihrem Projekt hinzufügen oder sich auf andere vorübergehende Bibliotheken verlassen, die durch andere Abhängigkeiten hinzugefügt wurden.
Standard für Gradle ist
transitive = true
.Beispiele und vollständige Erklärungen hier: http://www.devsbedevin.net/android-understanding-gradle-dependencies-and-resolving-conflicts/
quelle
Ich vermute, dass das Crashlytics-Artefakt, auf das Sie sich manuell beziehen, Abhängigkeiten als nicht transitiv (
transitive=false
) angibt , damit Sie nicht gezwungen sind, diese Abhängigkeiten standardmäßig einzubringen. Deshalb sehen Sie das gegenteilige Verhalten. Beispielsweise möchten einige Entwickler möglicherweise nicht alle Google Play-Dienste oder was auch immer Crashlytics sonst noch verwendet, wenn vorhanden.Wenn Sie dies entfernen, zieht Gradle die Abhängigkeit nicht mehr ein und kann nicht erstellt werden. Sie können diese Abhängigkeit bei Bedarf manuell angeben.
That being said - ich das größere Problem bei der Hand denken , ist , dass Sie nicht die Crashlytics Referenzierung Artefakt direkt werden soll - Sie sollten Stoff verwenden, und in Crashlytics als Folge ziehen: https://dev.twitter.com/fabric/ Android / Integrieren
quelle
Legt fest, ob diese Abhängigkeit einschließlich oder ohne transitive Abhängigkeiten aufgelöst werden soll. Die zu dieser Abhängigkeit gehörenden Artefakte können selbst Abhängigkeiten von anderen Artefakten aufweisen. Letztere werden transitive Abhängigkeiten genannt.
quelle
Gradle folgt standardmäßig transitiven Abhängigkeiten. Wenn Sie dies für eine bestimmte Bibliothek deaktivieren möchten, verwenden Sie das Transitiv-Flag.
Wenn Sie den Wert des Transitiv-Flags in "Falsch" ändern, wird das Herunterladen von Transitiv-Abhängigkeiten verhindert. Sie müssen also selbst hinzufügen, was auch immer erforderlich ist. Wenn Sie nur ein Modul-Jar ohne zusätzliche Abhängigkeiten möchten, können Sie dies ebenfalls angeben.
quelle
transitive
steuert die Transitivität. Gradle ist normalerweise standardmäßig transitiv, außer wenn dies nicht der Fall ist. Es gibt einen Fehler mit Transitivität und Klassifikatoren, siehe https://issues.gradle.org/browse/GRADLE-3188 .quelle