2012-12-13 14 views
9

Mam projekt gradle, który ma aplikacje java, a także aplikacje dla systemu Android.Zastosuj konfigurację do konkretnych projektów w gradle build

root/ 
    build.gradle 
    settings.gradle 
    java1/ 
    java2/ 
    android1/ 
    android2/ 
    java3/ 

itp

Co jest najlepsze praktyki dla struktury mój skrypt kompilacji? Jestem początkującym absolwentem i migruję projekt od maven do gradle.

Chciałem coś zrobić, zamiast

configure(subprojects) {} 

zastosowanie wtyczki i inne konkretne rzeczy.

takich jak

configure(java1, java2, java3) { // java specifics } 
configure(android1, android2) { // android specifics } 

ja prawdopodobnie zbliża się to ze złej drogi.

Bardziej wyraźnie muszę zastosować wtyczkę java tylko dla projektów java i androida dla projektów android.

Odpowiedz

4

Istnieje wiele sposobów, w zależności od tego, co chcesz ... Kilka przykładów:

// Configures just project java1 
project(":java1") { ... } 

// Configures projects java1 and java2 
["java1","java2"].each { name -> 
    project(":$name") { ... } 
} 

Można używać normalnego Groovy znaleźć/iteracyjne nad wszystkimi projektami.

+0

Coś w stylu groovy nowicjusza. Bardziej podoba mi się twoje podejście, ponieważ jest bardziej skalowalne. Dzięki – predhme

+0

Po przetestowaniu to nie zadziała. Skrypt narzeka na fakt, że nie może znaleźć root'a (w tym przypadku nazwa katalogu, która jest źródłem projektu). Projekt o ścieżce ": root" nie mógł zostać znaleziony w katalogu głównym 'root'. po prostu skopiować i wkleić // Konfiguracja projektów java1 i java2 [ "java1", "java2"] każdy {nazwa -> projektu (": $ name") {...} }. Wiersz błędu wskazuje na projekt (": $ name") – predhme

+0

Po tym fakcie poszedłem do przodu i spojrzałem na gradle/groovy apis i byłem w stanie napisać metodę zwracania podzbiorów podprojektów, które mogę przekazać do configure() metoda. To działa. Dzięki – predhme

3

Inna opcja:

configure([ project(':sub1'), project(':sub2'), ... ]) { 
    ... 
} 
0

Najkrótsza i najprostsza opcja:

configure(subprojects.findAll()) { 
    if (it.name.equals('MY_PROJECT')) { 
    ... 
    } else { 
    ... 
    } 
} 
0

Innym podejściem ...

W settings.gradle zrobić zdefiniowania projektów tak:

gradle.ext.javaProjects=[] 
gradle.ext.androidProjects=[] 

javaProject('java1') 
javaProject('java2') 
javaProject('java3') 
androidProject('android1') 
androidProject('android2') 

def javaProject(String name) { 
    gradle.ext.javaProjects.add(name) 
    include ":$name" 
} 

def androidProject(String name) { 
    gradle.ext.androidProjects.add(name) 
    include ":$name" 
} 

Teraz można odwołać te w build.gradle root:

def javaProjects = subprojects.findAll {gradle.ext.javaProjects.contains(it.name)}; 
def androidProjects = subprojects.findAll {gradle.ext.javaProjects.contains(it.name)}; 

configure(javaProjects) { 
... 
} 
configure(androidProjects) { 
... 
} 

Może to jest to przesada ... ale zazwyczaj mam metodę definicji projektu w moim settings.gradle tak. Na przykład. Jeśli chcesz umieścić wszystkie projekty java w folderze java, możesz zdefiniować następujące rzeczy:

def javaProject(String name) { 
    gradle.ext.javaProjects.add(name) 
    include ":$name" 
    project(":$name").projectDir = file('java/'+ name) 
} 
Powiązane problemy