CI\CD/Groovy Gradle

[Gradle] 프로젝트 수준의 Gradle에서 모듈 수준의 Gradle 제어하기

반응형

Project 수준의 build.gradle에서 모듈 수준의 build.gradle 제어하기

멀티 모듈 프로젝트를 만들다보면, 모든 모듈에 dependencies나 task들이 적용되어야 하는 경우가 있다. 이를 위해 프로젝트 수준의 build.gradle에서 모듈 수준의 build.gradle을 제어해야 할 경우가 생긴다. 이를 위해 Gradle에서는 allprojects, subprojects, project 메서드를 제공하는데 이번 글에서는 이 메서드들을 다루어볼 것이다. 

 

  • allprojects : 프로젝트 수준의 build.gradle 뿐만 아니라 해당 프로젝트에 포함된 모든 모듈의 build.gradle을 제어
  • subprojects : 해당 프로젝트에 포함된 모든 모듈의 build.gradle을 제어
  • project : 특정 모듈만 제어

 

allprojects 메서드를 활용한 모든 모듈 제어

allprojects 메서드는 프로젝트 수준의 build.gradle 뿐만 아니라 해당 프로젝트에 포함된 모든 모듈의build.gradle 스크립트를 제어한다.

allprojects {
    [모든 모듈에 적용할 gradle script]
}

 

예를 들어 모든 프로젝트에 printProjectName이라는 task를 넣고 싶은 경우  프로젝트 수준의 build.gradle에 allProjects 블록을 넣고 그 내부에 task를 넣으면 된다.

allprojects {
    task printProjectName {
        println "kotlinworld"
    }
}

 

실제 적용 화면은 다음과 같다. printProjectName task는 SimpleTodo 프로젝트 뿐만 아니라 내부의 모듈인 app 모듈에도 적용된다.

 

그림1. allprojects

 

 

subprojects 메서드를 이용한 서브모듈 제어

subprojects 메서드는 프로젝트 수준의 build.gradle을 제외한 모든 모듈(서브 모듈)의 build.gradle을 제어한다.

subprojects {
    [서브 모듈만을 위한 Gradle Script]
}

 

예를 들어 서브모듈을 위한 task 인 taskOnlyForSubModules를 서브모듈에만 생성하려면 다음과 같이 쓰면 된다.

subprojects {
    task taskOnlyForSubModules {
        println "submodule only task"
    }
}

 

그렇게 되면 서브모듈인 app 모듈의 build.gradle에 위 taskOnlyForSubModules task가 들어간다.

그림3. submodules

 

 

project 메서드를 활용한 특정 모듈 제어

특정 모듈에만 Gradle 스크립트를 추가하고 싶다면 project 메서드를 쓰면 된다. allprojects나 subprojects와 다르게 특정 모듈의 build.gradle에만 스크립트가 추가된다.

*왠만하면 해당 모듈의 build.gradle에 스크립트를 넣고 이 방식은 지양해야 한다. 외부에서 제어하는 것이 많아지면 모듈간 독립성이 보장되지 않기 때문이다. 모듈 간 의존성 정도만 설정하는 것이 좋다.

project(“:[모듈명]”){
    [모듈에 적용한 Gradle Script]
}

 

예를 들어 app module이 usecase 모듈을 의존하는 경우 다음과 같이 설정하면 된다.

project(“:app”){
    dependencies {
        implementation project(“:usecase”)
    }
}

 

 

 

반응형
 

Kotlin 사용자 모임 오픈 카톡

오셔서 궁금한 점을 질문해보세요!

open.kakao.com

 

이 글의 저작권은 Kotlin World 에 있습니다. 글, 이미지 무단 재배포 및 변경을 금지합니다.