2014-09-06 16 views
45

W tej chwili mam projekt biblioteki, na przykład projekt Foo, który zależy od biblioteki takiej jak OkHttp.Czy AAR może zawierać zależności przechodnie?

Teraz Foo ma maven buildstep, który generuje roczne sprawozdanie z działalności i przekazuje go do publicznego miejsca.

Teraz powiedzmy, że mam projekt B, nazwaliśmy go Bar. Pasek to aplikacja dla systemu Android, a Bar zależy od wersji Foo.

Cóż, mam to. Jednak, kiedy zadzwonić do public static funkcji w Foo z Bar że nazywa OkHttp, otrzymuję komunikat:

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

tak, to możliwe coś takiego? Czy też trzeba będzie ręcznie polegać na Bar na OkHttp, a także na innych zależnościach, które ma ?

Odpowiedz

40

Zajęło mi to trochę czasu, ale znalazłem to, czego szukałem. Tak się złożyło, że właśnie tak brzmiałem w moich poszukiwaniach.

to mniej widoczne odpowiedź była dokładnie tym, czego szukałem: Zasadniczo

Transitive dependencies not resolved for aar library using gradle

, musiałem dodać

transitive = true 

do build.gradle barskiej

np:

compile ('com.foo:FOO:[email protected]'){ 
     transitive=true 
} 

W ten sposób obejmuje wszystkie moje biblioteki przechodnie.

Należy jednak zauważyć, że może to rzeczywiście powodować konflikty między zależnościami (szczególnie lokalnymi), które można rozwiązać za pomocą znacznika "wyklucz".

+2

Podążam tym podejściem bez większego sukcesu. Zgodnie z poprzednio objaśnioną metodą moje ustawienia powinny wyglądać następująco: 'compile ('com.my :: biblioteka :: [email protected]') { przechodnia = true }' Ale kiedy importuję ostatnią bibliotekę w mój projekt, biblioteka przejściowa brakuje. Nie mam pojęcia, jak postępować, jakikolwiek pomysł? –

+13

@MichaelKnight Jeśli umieścisz plik aar jako plik lokalny przy użyciu flatDir, oznacza to, że aar nie zawiera zależności tranzytowych, powinieneś uwzględnić je ręcznie. Jednakże, jeśli pobierasz aar z, na przykład, maven repo, to biblioteka ma opis zależności, których używa (w pliku pom), a gradle może automatycznie pobrać je dla ciebie. – NazarK

+0

@MichaelKnight nie działa dla mnie –

Powiązane problemy