¿Qué hace transitive = true
exactamente Gradle ? No está claro en la documentación de Gradle . Esto está en el contexto de compile
dentro build.gradle
. En mi caso, estoy dependiendo de los crashlytics de Android.
compile('com.crashlytics.sdk.android:crashlytics:2.2.2@aar') {
transitive = true;
}
Varios documentos de Gradle ( aquí y aquí ) implican que el valor predeterminado "transitivo" es verdadero. Sin embargo, la eliminación transitive = true
da como resultado que no se introduzcan dependencias transitivas (en particular KitGroup
).
class file for io.fabric.sdk.android.KitGroup not found
Los documentos dicen que el valor predeterminado es verdadero, pero el comportamiento real parece ser lo contrario.
Estoy ejecutando Gradle 2.2.1. ¿Quizás el comportamiento cambió entre 2.2 y 2.4?
Editar : dependencias transitivas relacionadas no resueltas para la biblioteca aar usando gradle
java
android
gradle
build.gradle
crashlytics
Steve Kuo
fuente
fuente
Respuestas:
Estás usando la
@aar
notación.Significa que desea descargar solo el artefacto aar y no dependencias.
Puede consultar esta parte de la documentación :
Consulte la
1.4.1.2. Artifact only notation
sección:Usando la
@aar
notación si desea descargar las dependencias, debe agregartransitive=true
.Esperaría que omitir @aar debería funcionar sin agregar el atributo transitivo.
fuente
En una nota más general: la configuración
transitive = false
en lacrashlytics
biblioteca hace que gradle ignore todas las bibliotecas requeridas porcrashlytics
(= "bibliotecas transitorias") y no las descargue y vincule.Tendría que agregar manualmente las bibliotecas requeridas a su proyecto o confiar en otras bibliotecas transitorias agregadas por otras dependencias.
El valor predeterminado para gradle es
transitive = true
.Ejemplos y explicación completa aquí: http://www.devsbedevin.net/android-understanding-gradle-dependencies-and-resolving-conflicts/
fuente
Supongo que el artefacto Crashlytics al que te refieres manualmente especifica dependencias como no transitivas (
transitive=false
) para que no estés obligado a incorporar esas dependencias de forma predeterminada. Es por eso que estás viendo el comportamiento opuesto. Por ejemplo, algunos desarrolladores pueden no querer incorporar todos los Servicios de Google Play o cualquier otra cosa que Crashlytics pueda usar si está presente.Entonces, al eliminar eso, Gradle ya no atrae la dependencia y no se puede construir. Puede especificar esa dependencia manualmente si lo necesita.
Dicho esto , creo que el problema más importante en este momento es que no debería hacer referencia al artefacto de Crashlytics directamente, sino que debería usar Fabric y, como resultado, utilizar Crashlytics: https://dev.twitter.com/fabric/ android / integrando
fuente
Establece si esta dependencia debe resolverse incluyendo o excluyendo sus dependencias transitivas. Los artefactos que pertenecen a esta dependencia podrían tener dependencias de otros artefactos. Estas últimas se llaman dependencias transitivas.
fuente
Gradle sigue las dependencias transitivas por defecto. Si desea desactivar eso para una biblioteca en particular, use la bandera transitiva.
Cambiar el valor del indicador transitivo a falso evita la descarga de dependencias transitivas, por lo que deberá agregar lo que sea necesario. Si solo desea un módulo jar, sin dependencias adicionales, también puede especificarlo.
fuente
transitive
Controla la transitividad. Gradle normalmente tiene el valor predeterminado de transitivo, excepto cuando no lo hace. Hay un error con transitividad y clasificadores, consulte https://issues.gradle.org/browse/GRADLE-3188 .fuente