Op dit moment heb ik een bibliotheekproject, bijvoorbeeld project Foo, dat afhankelijk is van een bibliotheek als OkHttp.
Foo heeft nu een Maven-buildstep die een AAR genereert en deze naar een openbare plaats pusht.
Laten we zeggen dat ik project B heb, we zullen het Bar noemen. Bar is een Android-applicatie en Bar is afhankelijk van Foo.
Nou, dat heb ik. Wanneer ik echter een public static
-functie in Foo vanuit Bar aanroep die OkHttp aanroept, krijg ik dit bericht:
java.lang.NoClassDefFoundError: com.squareup.okhttp.OkUrlFactory
at com.foo.sdk.utils.OkHttpStack.<init>(OkHttpStack.java:15)
Is zoiets mogelijk? Of moet Bar handmatig afhankelijk zijn van OkHttp en andere afhankelijkheden die Foo heeft?
Antwoord 1, autoriteit 100%
Het heeft even geduurd, maar ik heb gevonden wat ik zocht. Het was toevallig de manier waarop ik mijn zoekopdrachten formuleerde.
Dit minder geziene antwoord was precies wat ik zocht:
Transitieve afhankelijkheden niet opgelost voor aar bibliotheek met gradle
Houd er rekening mee dat afhankelijkheden alleen worden geassocieerd met aar-bibliotheken als ze worden gehost in een maven-repository, in de eerste plaats, omdat het pom-bestand niet is opgenomen in de aar.
In wezen moest ik een
. toevoegen
transitive = true
…naar de build.gradle
van Bar
Voorbeeld:
compile ('com.foo:FOO:1.0.0@aar'){
transitive=true
}
Op deze manier bevat het al mijn transitieve bibliotheken.
Houd er echter rekening mee dat dit conflicten kan veroorzaken tussen afhankelijkheden (vooral lokale) die kunnen worden opgelost met een exclude
-tag.