web-dev-qa-db-fra.com

Un AAR peut-il inclure des dépendances transitives?

En ce moment, j'ai un projet de bibliothèque, disons le projet Foo qui dépend d'une bibliothèque comme OkHttp.

Maintenant, Foo a un buildstep Maven qui génère un AAR et le pousse vers un lieu public.

Disons maintenant que j'ai le projet B, nous l'appellerons Bar. Bar est une application Android, et Bar dépend de Foo.

Eh bien, j'ai ça. Cependant, lorsque j'appelle un public static fonction dans Foo de Bar qui appelle OkHttp, je reçois ce message:

Java.lang.NoClassDefFoundError: com.squareup.okhttp.OkUrlFactory
            at com.foo.sdk.utils.OkHttpStack.<init>(OkHttpStack.Java:15)

Une telle chose est possible? Ou Bar devra-t-il dépendre manuellement d'OkHttp ainsi que de toutes les autres dépendances de Foo?

60
VicVu

Cela a pris un peu de temps mais j'ai trouvé ce que je cherchais. C'était juste la façon dont je formulais mes recherches.

Cette réponse moins connue était exactement ce que je cherchais:

Dépendances transitives non résolues pour la bibliothèque aar utilisant gradle

Essentiellement, je devais ajouter un

transitive = true

...au build.gradle de Bar

Exemple:

compile ('com.foo:FOO:1.0.0@aar'){
       transitive=true
}

De cette façon, il inclut toutes mes bibliothèques transitives.

Notez cependant que cela peut réellement provoquer des conflits entre les dépendances (en particulier locales) qui peuvent être résolus à l'aide d'une balise exclude.

53
VicVu