158 votes

Quelle est la différence entre allprojects et subprojects ?

Sur un build gradle multi-projets, quelqu'un peut-il me dire quelle est la différence exacte entre la section "allprojects" et la section "subprojects" ? Juste le répertoire parent ? Est-ce que quelqu'un utilise les deux ? Si oui, avez-vous des règles générales qui déterminent ce qui est typiquement mis dans chacune d'elles ?

Question connexe : quelle est la différence entre les deux syntaxes (réellement pour allprojects ET subprojects) :

subprojects {  ...
}

y

configure(subprojects) { ...
}

Quand préféreriez-vous l'un plutôt que l'autre ?

151voto

Justin Ryan Points 2263

Dans une construction gradle multi-projets, vous avez un rootProject et les sous-projets. La combinaison des deux est allprojects. Le rootProject est le point de départ de la construction. Un modèle commun est un rootProject qui n'a pas de code et les sous-projets sont des projets java. Dans ce cas, vous appliquez le plugin java uniquement aux sous-projets :

subprojects {
    apply plugin: 'java'
} 

Cela équivaudrait à un projet maven aggregate pom qui ne construit que les sous-modules.

En ce qui concerne les deux syntaxes, elles font exactement la même chose. La première est simplement plus belle.

53voto

Peter Niederwieser Points 36369

Pour compléter la réponse de Ryan, le configure devient importante lorsque vous souhaitez configurer des sous-ensembles d'objets personnalisés. Par exemple configure([project(":foo"), project(":bar")]) { ... } o configure(tasks.matching { it.name.contains("foo") }) { ... } .

Quand utiliser allprojects vs. subprojects dépend des circonstances. Souvent, vous utiliserez les deux. Par exemple, les plugins liés au code comme le plugin Java sont généralement appliqués à subprojects car dans de nombreuses constructions, le projet racine ne contient pas de code. Les plugins Eclipse et IDEA, quant à eux, sont typiquement appliqués à allprojects . En cas de doute, regardez les exemples et les autres constructions et/ou expérimentez. L'objectif général est d'éviter toute configuration non pertinente. Dans ce sens, subprojects est meilleur que allprojects tant qu'elle donne les résultats escomptés.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X