2012-08-22 19 views
65

In una build di gradle a più progetti, qualcuno può dirmi qual è esattamente la differenza tra la sezione "tutti i progetti" e quella "sottoprogetti"? Solo la directory principale? Qualcuno usa entrambi? In tal caso, hai delle regole generali che determinano cosa viene tipicamente inserito in ciascuna di esse?Qual è la differenza tra tutti i progetti e sottoprogetti

questione connessa: qual è la differenza tra le due sintassi (in realtà per allprojects e sottoprogetti):

subprojects { ... 
} 

e

configure(subprojects) { ... 
} 

Quando volete uno sopra l'altro?

risposta

64

In una build gradle a più progetti, si dispone di un rootProject e dei sottoprogetti. La combinazione di entrambi è tutti i progetti. RootProject è da dove la build parte. Un modello comune è un rootProject senza codice ei sottoprogetti sono progetti java. In tal caso, si applica il plugin Java per solo i sottoprogetti:

subprojects { 
    apply plugin: 'java' 
} 

questo sarebbe equivalente ad un progetto di aggregazione pom Maven che solo costruisce i sottomoduli.

Per quanto riguarda le due sintassi, fanno esattamente la stessa cosa. Il primo sembra solo migliore.

+0

Sto cercando di capire la tua risposta e perché uno vorrebbe "rootProject non ha codice"? –

+1

Può avere il codice ma * la maggior parte del tempo * è solo per combinare tutti i progetti secondari in un singolo progetto root. – mallaudin

+1

Questo ragazzo costruisce. –

33

In aggiunta alla risposta di Ryan, il metodo configure diventa importante quando si desidera configurare sottoinsiemi personalizzati di oggetti. Ad esempio configure([project(":foo"), project(":bar")]) { ... } o configure(tasks.matching { it.name.contains("foo") }) { ... }.

Quando utilizzare allprojects rispetto a subprojects dipende dalle circostanze. Spesso userete entrambi. Ad esempio, i plugin relativi al codice come il plugin Java sono tipicamente applicati a subprojects, perché in molte build il progetto root non contiene alcun codice. I plugin Eclipse e IDEA, d'altra parte, sono in genere applicati a allprojects. In caso di dubbi, guarda esempi e altre build e/o esperimenti. L'obiettivo generale è di evitare una configurazione irrilevante. In questo senso, subprojects è migliore di allprojects finché fornisce i risultati previsti.

Problemi correlati