2013-03-08 14 views
21

Używamy gradle przez około rok i odnieśliśmy z niego nieco sukcesów. Wiele funkcji jest wciąż trochę nieprzejrzystych, ale do tego dochodzimy. Nie jestem pewien, czy zamierzam rozwiązać problem prawidłowo, więc powiem jedno pytanie:Czy można utworzyć projekt gradacji z więcej niż 2 poziomami?

Wszystkie przykłady, które widziałem dla gradle, mają projekt główny i jeden poziom podprojektów. Z kilku powodów chcielibyśmy skonsolidować nasze projekty git. Wszystkie te projekty są stopniowe, z których niektóre mają grad-podprojekty. Chcemy skończyć z zasadniczo wielopoziomową strukturą. Nie chcemy zmieniać konfiguracji gradle dla wszystkich tych projektów, a zamiast tego chcielibyśmy uzyskać ocenę na najwyższym poziomie, która zarządza wszystkimi projektami i odpowiednimi podprojektami. Moja pierwsza próba pokazała, że ​​nie mogę mieć kontrolnego build.gradle, który orkiestruje wszystkie projekty i podprojekty. czy robię coś źle? Czy podążam za izepsutym paradygmatem?

Oto struktura próbka tego, co chcę zrobić:

Top Project 
    build.gradle 
    Project 
    build.gradle 
    Sub Project 
     build.gradle 
     src 
    Sub Project 
     ... 
    Project 
    ... 

Dziękuję i mam nadzieję, że nie tęsknię za pewne oczywiste wyjaśnienie w dokumentacji.

+1

Po wykonaniu kilku dalszych czynności, wygląda na to, że powinienem użyć zadania GradleBuild: http://www.gradle.org/docs/current/userguide/organizing_build_logic.html#sec:external_build –

+0

'GradleBuild' to najlepsze, co możesz zrobić dzisiaj. Prawdziwa oferta (kompilacja buildów) jest funkcją planowaną. –

Odpowiedz

16

bym po prostu umieścić w TopProject/settings.gradle:

include 'Project1:SubProject1' 
include 'Project1:SubProject2' 
include 'Project2:SubProject1' 
... 

Jedyną zmianą wymagane do projektów masz aktualnie jest usunięcie plików settings.gradle z nich, jak można mieć tylko jedno ustawienie plik .gradle na strukturę projektu.

+0

Możliwe, że nasze kompilacje nie są idealnie ustawione, ale to nie działa dobrze. GradleBuild wydaje się robić sztuczkę wraz z generowaniem dynamicznych zadań. –

+0

Ten jest potwierdzony do działania! –

0

To działa całkiem dobrze:

ext{ 
    buildPrefix = "build" 
    allProjects = ["P1", "P2"] 
} 

def createTasks(String prefix) { 
    def newTasks = allProjects.each { 
    def pName -> 
     def tName = "$prefix$pName" 
     tasks.add(name: tName, type: GradleBuild) { 
     dir = pName 
     tasks = [ prefix ] 
     } 
    } 
} 

createTasks(buildPrefix) 

ext { 
    buildTasks = tasks.findAll{ t -> t.name.startsWith(buildPrefix) } 
} 

task build(dependsOn: buildTasks) {} 

mogę tylko dodać inne zadania, które chcę narażać na najwyższym poziomie.

Dzięki za wskazówki.

7

Miałem podobny problem. Najprostszym rozwiązaniem było skonfigurowanie gradle przez dodanie projektów w pliku $ root/settings.gradle, podobnym do odpowiedzi Erdiego. Jednak udało mi się automatycznie dodać wszystkie podprojekty. Logika po prostu przejdzie przez moją strukturę katalogów i znajdzie wszystkie katalogi, które zawierają build.gradle i doda je jako podprojekty.

Oto jak to zrobić:

  • Upewnij się, że nie ma żadnych innych settings.gradle ale korzeń jeden
  • Zawartość settings.gradle pliku głównego powinno być:
fileTree('.') { 
    include '**/build.gradle' 
    exclude 'build.gradle' // Exclude the root build file. 
}.collect { relativePath(it.parent).replace(File.separator, ':') } 
.each { include(it) } 

Mam nadzieję, że to pomoże.

+0

To jest naprawdę świetne. +1 – Ajax

Powiązane problemy