2012-08-22 1 views
65

멀티 프로젝트 gradle 빌드에서 누군가가 "allprojects"섹션과 "subprojects"섹션의 차이점을 정확히 말해 줄 수 있습니까? 그냥 부모 디렉토리 야? 누구도 둘 다 사용합니까? 그렇다면, 일반적으로 각각의 규칙을 결정하는 일반적인 규칙이 있습니까?allprojects와 subprojects의 차이점

관련 질문 : (정말 allprojects 및 하위 프로젝트에 대한) 두 구문의 차이점은 무엇입니까 :

subprojects { ... 
} 

configure(subprojects) { ... 
} 

경우 것입니다 당신이 다른 이상 하나?

답변

64

다중 프로젝트 gradle 빌드에는 rootProject와 하위 프로젝트가 있습니다. 두 가지의 조합은 모두 프로젝트입니다. rootProject는 빌드가 시작되는 곳입니다. 일반적인 패턴은 rootProject에는 코드가없고 하위 프로젝트는 Java 프로젝트입니다. 이 경우에, 당신은 단지 하위 프로젝트에 자바 플러그인을 적용

subprojects { 
    apply plugin: 'java' 
} 

이 단지 서브 모듈을 빌드 받는다는 집계 치어 프로젝트에 해당 될 것이다.

두 구문에 관해서는 완전히 똑같습니다. 첫 번째가 더 좋아 보인다.

+0

답변을 이해하려고하는데 왜 "rootProject에 코드가 필요하지 않습니까?" –

+1

코드는 있지만 대부분의 경우 * 단일 루트 프로젝트 아래의 모든 하위 프로젝트를 결합하기위한 것일뿐입니다. – mallaudin

+1

이 녀석은 지어졌습니다. –

33

사용자 정의 하위 집합을 구성하려면 Ryan의 대답에 덧붙여 configure 메서드가 중요합니다. 예를 들어 configure([project(":foo"), project(":bar")]) { ... } 또는 configure(tasks.matching { it.name.contains("foo") }) { ... }입니다.

allprojectssubprojects을 사용하는 경우는 상황에 따라 다릅니다. 종종 두 가지를 모두 사용하게됩니다. 예를 들어 Java 플러그인과 같은 코드 관련 플러그인은 일반적으로 subprojects에 적용됩니다. 많은 빌드에서 루트 프로젝트에 코드가 포함되어 있지 않기 때문입니다. Eclipse와 IDEA 플러그인은 일반적으로 allprojects에 적용됩니다. 의심스러운 경우 예제 및 기타 빌드 및/또는 실험을 살펴보십시오. 무관 한 구성을 피하는 것이 일반적인 목표입니다. 그러한 의미에서 예상 결과를 제공하는 한 subprojectsallprojects보다 좋습니다.