2014-09-06 15 views
45

Quindi, al momento ho un progetto di libreria, ad esempio il progetto Foo che dipende da una libreria come OkHttp.Un AAR può includere dipendenze transitive?

Ora, lo Foo ha un maven buildstep che genera un AAR e lo spinge in un luogo pubblico.

Quindi ora diciamo che ho il progetto B, lo chiameremo Bar. Bar è un'applicazione Android e Bar dipende da Foo.

Bene, ho quello. Tuttavia, quando faccio una chiamata a una funzione public static in Foo da Bar che chiama OkHttp, ottengo questo messaggio:

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

Quindi, è una cosa possibile? O sarà Bar necessario dipendere manualmente da OkHttp e da qualsiasi altra dipendenza Foo?

risposta

40

Quindi, ci è voluto un po 'di tempo ma ho trovato quello che stavo cercando. È stato il modo in cui stavo formulando le mie ricerche.

Questa risposta meno visto è stato esattamente quello che stava cercando:

Transitive dependencies not resolved for aar library using gradle

In sostanza, avevo bisogno di aggiungere un

transitive = true 

alla build.gradle di Bar

ex:

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

In questo modo include tutte le mie librerie transitive.

Si noti, tuttavia, che ciò potrebbe effettivamente causare conflitti tra le dipendenze (in particolare quelle locali) che possono essere risolte utilizzando un tag 'exclude'.

+2

Sto seguendo quell'approccio senza molto successo. In base al metodo spiegato in precedenza, le mie impostazioni dovrebbero essere le seguenti: 'compile ('com.my:library:[email protected]') { transitive = true }' Ma quando importare la libreria finale in il mio progetto, la lib transitivo manca. Non ho idea di come procedere, qualche idea? –

+13

@MichaelKnight Se si include aar come file locale usando flatDir, allora significa che aar non contiene dipendenze transitive, dovresti includerle manualmente. Tuttavia, se stai recuperando aar da, ad esempio, Maven Repos, allora la libreria ha una descrizione di quali dipendenze sta usando (nel file pom) e gradle può recuperarli automaticamente per te. – NazarK

+0

@MichaelKnight non funziona per me –

Problemi correlati