2012-08-22 40 views
65

En una compilación de varios proyectos, ¿alguien puede decirme cuál es exactamente la diferencia entre la sección "todos los proyectos" y los "subproyectos"? ¿Solo el directorio principal? ¿Alguien usa ambos? De ser así, ¿tiene reglas generales que determinen qué se pone típicamente en cada una?¿Cuál es la diferencia entre todos los proyectos y subproyectos

pregunta relacionada: ¿cuál es la diferencia entre las dos sintaxis (realmente para allprojects y subproyectos):

subprojects { ... 
} 

y

configure(subprojects) { ... 
} 

¿Cuándo uno sobre el otro?

Respuesta

64

En una construcción gradle multiproyecto, tiene un proyecto raíz y los subproyectos. La combinación de ambos es todos los proyectos. El proyecto raíz es el origen de la construcción. Un patrón común es que un proyecto de raíz no tiene código y los subproyectos son proyectos de Java. En cuyo caso, se aplica el complemento de Java sólo a los sub-proyectos:

subprojects { 
    apply plugin: 'java' 
} 

Esto sería equivalente a un proyecto pom agregada experta que solo construye los submódulos.

En cuanto a las dos sintaxis, hacen exactamente lo mismo. El primero se ve mejor.

+0

Estoy tratando de entender su respuesta, y ¿por qué uno querría que "rootProject no tenga código"? –

+1

Puede tener código pero * la mayor parte del tiempo * es solo para combinar todos los subproyectos en un solo proyecto raíz. – mallaudin

+1

Este chico construye. –

33

Agregando a la respuesta de Ryan, el método configure cobra importancia cuando desea configurar subconjuntos personalizados de objetos. Por ejemplo, configure([project(":foo"), project(":bar")]) { ... } o configure(tasks.matching { it.name.contains("foo") }) { ... }.

Cuándo utilizar allprojects frente a subprojects depende de las circunstancias. A menudo usarás ambos. Por ejemplo, los complementos relacionados con el código como el complemento de Java se suelen aplicar a subprojects, porque en muchas construcciones, el proyecto raíz no contiene ningún código. Por otro lado, los complementos Eclipse e IDEA se aplican generalmente al allprojects. Si tiene dudas, observe ejemplos y otras compilaciones y/o experimente. El objetivo general es evitar la configuración irrelevante. En ese sentido, subprojects es mejor que allprojects, siempre que arroje los resultados esperados.

Cuestiones relacionadas