Quelle est la différence entre tous les projets et sous-projets


124

Sur une version gradle multi-projets, quelqu'un peut-il me dire quelle est exactement la différence entre la section «tous les projets» et celle «sous-projets»? Juste le répertoire parent? Quelqu'un utilise-t-il les deux? Dans l'affirmative, avez-vous des règles générales qui déterminent ce qui est généralement mis dans chacun d'eux?

Question connexe: quelle est la différence entre les deux syntaxes (vraiment pour tous les projets ET sous-projets):

subprojects {  ...
}

et

configure(subprojects) { ...
}

Quand voudriez-vous l'un sur l'autre?

Réponses:


119

Dans une génération gradle multi-projets, vous avez un rootProject et les sous-projets. La combinaison des deux est tous les projets. Le rootProject est le point de départ de la construction. Un modèle courant est qu'un rootProject 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 pom agrégé maven qui ne construit que les sous-modules.

Concernant les deux syntaxes, elles font exactement la même chose. Le premier semble mieux.


J'essaye de comprendre votre réponse, et pourquoi on voudrait "rootProject n'a pas de code"?
Marian Paździoch

6
Il peut avoir du code, mais la plupart du temps, c'est juste pour combiner tous les sous-projets sous un seul projet racine.
mallaudin

44

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

Quand utiliser allprojectsou subprojectsdépend des circonstances. Vous utiliserez souvent 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 versions, le projet racine ne contient aucun code. Les plugins Eclipse et IDEA, en revanche, sont généralement appliqués à allprojects. En cas de doute, regardez des exemples et autres constructions et / ou expérimentations. L'objectif général est d'éviter une configuration non pertinente. En ce sens, subprojectsc'est mieux que allprojectstant qu'il donne les résultats escomptés.


et si certains de mes sous-projets dépendent des tampons de protocole? devrais-je appliquer proto-gradle-plugin à tous? ou sous ou seulement à ces quelques projets en sous?
user1870400
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.