2014-07-26 30 views
25

czy można określić zależność w Gradle (w Android studio) do innego projektu gradle poza bieżącymi granicami projektu? Na przykład ze ścieżką względną coś takiego:Zależności Gradle: kompilacja projektu według ścieżki względnej

dependencies { 
    compile project('../../stdlib/dagger') 
} 

Więc co ja TRIE jest coś takiego:

Mam Android. Struktura wygląda następująco:

  • MojaApl (ścieżka/Users/foo/roboczy/MojaApl)
    • app (ścieżka/Users/foo/roboczy/MojaApl/app)

I mam Gradle android projektu biblioteki zawierającej 3 submodules:

  • stdlib (ścieżka/Users/foo/roboczy/stdlib)
    • sztylet (ścieżka/Users/foo/roboczy/stdlib/sztylet)
    • utils (ścieżka/Users/foo/roboczy/stdlib/utils)
    • http (ścieżka/Users/foo/roboczy/stdlib/HTTP)

Co chcę jest kompilacja sztyletem, utils http, moduł do projektu MojaApl.

Moduły biblioteki stdlib są intensywnie rozwijane i będą rosły wraz z rozwojem MyApp. Dlatego nie chcę wepchać ich do repozytorium maven za każdym razem, gdy wprowadzam niewielką zmianę.

Czy istnieje możliwość połączenia innych projektów gradacji w jakiś sposób? Poszukuję tymczasowego rozwiązania. Popchnę std bibliotekę do repozytorium maven, gdy źródło będzie stabilne.

Również, jako rozwiązanie tymczasowe, możliwe jest rozwiązanie z zestawem źródłowym. Mam również rozważyć, aby folderowi biblioteki w MojaApl który jest dowiązaniem do stdlib, ale nie mogę zmusić go do pracy zgodnie z oczekiwaniami:

  • MojaApl (ścieżka/Users/foo/roboczy/MojaApl)
    • app (ścieżka/Users/foo/roboczy/MojaApl/app)
    • biblioteki (dowiązaniem do/Users/foo/Przestrzeń robocza/stdlib)
dependencies { 
     compile project(':libraries:dagger') 
    } 

Każdy pomysł, jak rozwiązać takie zależności w gradle?

Odpowiedz

67

Możesz dołączyć zewnętrzny moduł projektu root za pomocą pliku "settings.gradle" z głównego projektu. Musi to być również projekt gradle w konkretnej sytuacji budowania Androida, musisz skonfigurować każdy moduł jako projekt wtyczki "biblioteki Android".

Na przykład w projekcie „MojaApl” settings.gradle można spróbować to:

include 'app' 
include 'dagger' 
project(':dagger').projectDir = new File('/Users/foo/workspace/stdlib/dagger') 

Twój build.gradle „myapp” musi odzwierciedlać potrzeby modułu „sztylet” w sposób względny ścieżki Gradle :

dependencies { 
    compile project(':dagger') 
} 

I to wszystko. Powtórz ten krok z każdym zewnętrznym modułem, którego potrzebujesz, i będziesz miał poprawną konfigurację wielu projektów Gradle.

+1

Doskonale, dzięki! – sockeqwe

+0

kiedy próbuję tego, otrzymuję komunikat "Wystąpił problem podczas oceniania projektu": konto ". > Nie można uzyskać właściwości 'compileSdkVersion' na rozszerzeniu właściwości dodatkowych, ponieważ nie istnieje ** konto jest moim projektem zewnętrznym ** –

+4

działa idealnie, ale zastanawiam się, dlaczego '' 'include 'dagger''''' '' '' dwukropek, podczas gdy '' 'project (': dagger') .projectDir''' ma dwukropek? – howerknea

Powiązane problemy