Co transitive = true
dokładnie robi Gradle ? Z dokumentacji Gradle nie wynika jasno . Dzieje się to w kontekście compile
wnętrza build.gradle
. W moim przypadku polegam na crashlytics Androida.
compile('com.crashlytics.sdk.android:crashlytics:2.2.2@aar') {
transitive = true;
}
W kilku dokumentach Gradle ( tutaj i tutaj ) sugeruje się, że wartość „przechodnia” jest domyślnie włączona. Jednak usunięcie transitive = true
powoduje, że zależności przechodnie nie są wprowadzane (w szczególności KitGroup
).
class file for io.fabric.sdk.android.KitGroup not found
Doktorzy twierdzą, że domyślnie jest to prawda, ale rzeczywiste zachowanie wydaje się być odwrotne.
Używam Gradle 2.2.1. Być może zachowanie zmieniło się między 2,2 a 2,4?
Edycja : powiązane zależności przechodnie nie zostały rozwiązane dla biblioteki aar przy użyciu gradle
java
android
gradle
build.gradle
crashlytics
Steve Kuo
źródło
źródło
Odpowiedzi:
Używasz
@aar
notacji.Oznacza to, że chcesz pobrać tylko artefakt aar, bez żadnych zależności.
Możesz sprawdzić tę część dokumentacji :
Sprawdź
1.4.1.2. Artifact only notation
sekcję:Używając
@aar
notacji, jeśli chcesz pobrać zależności, powinieneś dodaćtransitive=true
.Spodziewałbym się, że pomijanie @aar powinno działać bez dodawania atrybutu przechodniego.
źródło
Bardziej ogólna uwaga: ustawienie
transitive = false
wcrashlytics
bibliotece powoduje, że gradle ignoruje wszystkie biblioteki wymagane przezcrashlytics
(= "biblioteki przejściowe") i nie pobiera ich ani nie łączy.Musisz ręcznie dodać wymagane biblioteki do projektu lub polegać na innych bibliotekach przejściowych dodanych przez inne zależności.
Domyślnie dla gradle jest
transitive = true
.Przykłady i pełne wyjaśnienie tutaj: http://www.devsbedevin.net/android-understanding-gradle-dependencies-and-resolving-conflicts/
źródło
Domyślam się, że artefakt Crashlytics do którego masz na myśli ręcznie określa zależności jak nie przechodni (
transitive=false
), dzięki czemu nie są zmuszeni do postawienia w zależności domyślnie. Dlatego widzisz odwrotne zachowanie. Na przykład niektórzy programiści mogą nie chcieć pobierać wszystkich usług Google Play lub czegokolwiek, z czego Crashlytics może korzystać, jeśli jest obecny.Tak więc, usuwając to, Gradle nie pobiera już zależności i nie udaje mu się zbudować. W razie potrzeby możesz określić tę zależność ręcznie.
Biorąc to pod uwagę - myślę, że większym problemem jest to, że nie powinieneś odwoływać się bezpośrednio do artefaktu Crashlytics - powinieneś używać Fabric i w rezultacie wciągać Crashlytics: https://dev.twitter.com/fabric/ android / integracja
źródło
Ustawia, czy ta zależność powinna zostać rozwiązana, w tym lub z wykluczeniem jej zależności przechodnich. Artefakty należące do tej zależności mogą same mieć zależności od innych artefaktów. Te ostatnie nazywane są zależnościami przechodnimi.
źródło
Gradle domyślnie śledzi zależności przechodnie. Jeśli chcesz to wyłączyć dla określonej biblioteki, użyj flagi przechodni.
Zmiana wartości flagi przechodni na false zapobiega pobieraniu zależności przechodnich, więc będziesz musiał samodzielnie dodać wszystko, co jest wymagane. Jeśli potrzebujesz tylko pliku jar modułu, bez żadnych dodatkowych zależności, możesz to również określić.
źródło
transitive
kontroluje przechodniość. Gradle zwykle przyjmuje wartość przechodnią, chyba że tak nie jest. Wystąpił błąd z przechodniością i klasyfikatorami, zobacz https://issues.gradle.org/browse/GRADLE-3188 .źródło