Skip to content

Gradle #3 - settings.gradle 파일 용도

글 요약

  1. settings.gradle 파일을 통해 subProject를 생성할 수 있다.

  2. project 구조를 확인하기 위해선 ./gradlew projects 명령어를 사용한다.

  3. subProject 안에는 빌드를 수행하기 위한 build.gradle 파일과 src 디렉터리가 있다.

  4. subProject를 생성하기 위해선 settings.gradle 파일 안에 include('프로젝트 명')을 추가한다.

  5. 그 이후 subProject 이름의 디렉터리를 생성한 후 srcbuild.gradle파일을 해당 디렉터리에 넣는다.

  6. ./gradle :<subPorject명>:<task명> 을 입력하면 subProject에서 지원 가능한 task 목록이 나타난다.

🔎 Gradle 파일 살펴보기

Gradle에서 살펴볼 파일은 gradle.build 파일과 settings.gradle 입니다. 이 글에서는 해당 프로젝트의 큰 숲을 보기 위해 settings.gradle 파일을 살펴봅니다.

🩻 settings.gradle 구조

settings.gradle 파일을 훑어보면 아래와 같이 나타나 있습니다. 일단, 플러그인 부분은 생략한 채로 설명드리겠습니다. gradle-example이 현재 수행하고 있는 rootProject명이며, include('lib') 부분이 gradle-example subProjectlib 프로젝트 입니다.

settings.gradle
plugins {
    // Apply the foojay-resolver plugin to allow automatic download of JDKs
    id 'org.gradle.toolchains.foojay-resolver-convention' version '0.7.0'
}

rootProject.name = 'gradle-example'
include('lib')

🤝🏻 rootProject와 subProject의 관계

rootProject와 subProject의 관계는 아래의 이미지1 처럼 구성되어 있습니다. 각 subProject 마다 build.gradle 파일이 있음을 주목해주세요.

Image title

이미지1 - gradle 프로젝트 구조

📜 subProject 목록 확인

subProject가 존재하는지 확인하기 위해서는, ./gradlew projects 명령어를 입력하여 확인합니다. 이전 포스팅에서 생성한 프로젝트는 lib 이름의 subProject가 존재하는 것을 알 수 있습니다.

subProject 확인 명령어
fromitive@dev:~/practice/gradle-example$ ./gradlew projects

> Task :projects

------------------------------------------------------------
Root project 'gradle-example'
------------------------------------------------------------

Root project 'gradle-example'
+--- Project ':lib'

To see a list of the tasks of a project, run gradlew <project-path>:tasks
For example, try running gradlew :lib:tasks

⚙️ subProject가 지원하는 task 확인

./gradlew로 subProject가 지원하는 task 목록을 확인하기 위해선 ./gradlew :<subProject 명>:tasks 를 입력하면 됩니다.

subProject 단독으로 task를 실행하기 위해선 ./gradlew :<subProject 명>:<task명>을 입력하면 되겠습니다.

subProject가 지원하는 task 확인
romitive@dev:~/practice/gradle-example$ ./gradlew :lib:tasks

> Task :lib:tasks

------------------------------------------------------------
Tasks runnable from project ':lib'
------------------------------------------------------------
(..생략..)

🌟 subProject 생성하기

rootProject에서 subProject를 추가해 봅니다.

1️⃣ settings.gradle에 include 문구 추가

settings.gradleinclude 문구를 아래와 같이 추가합니다. include에 들어갈 문구는 subProject 명이 됩니다. 아래의 예제의 추가 할 프로젝트 명은 moosong 입니다.

settings.gradle
1
2
3
rootProject.name = 'gradle-example'
include('lib')
include('moosong')

./gradlew projects 명령어를 입력하면 아래와 같이 moosong이름의 subProject가 추가 되었음을 알 수 있습니다.

gradlew projets 결과
fromitive@dev:~/practice/gradle-example$ ./gradlew projects
(..생략..)
Root project 'gradle-example'
+--- Project ':lib'
\--- Project ':moosong'

./gradlew :moosong:tasks를 입력하면, 아직 moosong디렉터리와 build.gradle 파일이 없어 help 관련 task만 지원하고 있습니다.

./gradlew :moosong:tasks 실행 결과 1
fromitive@dev:~/practice/gradle-example$ ./gradlew :moosong:tasks

> Task :moosong:tasks

------------------------------------------------------------
Tasks runnable from project ':moosong'
------------------------------------------------------------

Help tasks
----------
(..생략..)

2️⃣ subProject 디렉터리 생성

rootProject인 gradle-example 디렉터리 안에 moosong 디렉터리를 생성한 후 lib디렉터리의 srcbuild.gradle을 복사해 줍니다. 작업이 완료되면 아래와 같은 디렉터리 구조가 완성됩니다.

moosong 디렉터리 구조
.
(..생략..)
├── 📁 moosong
   ├── 📄 build.gradle
   └── 📁 src
       ├── main
       └── test
(..생략..)

✅ subProject task 실행

./gradlew :moosong:tasks를 입력하면 이전과는 다르게 여러 개의 task들이 생긴 것을 확인할 수 있습니다. 정확히는 lib 디렉터리의 task와 동일한 내용이 지원됩니다. 그 이유는 moosong 디렉터리의 build.gradle 파일이 lib 디렉터리의 build.gradle과 동일하기 때문입니다.

./gradlew :moosong:tasks 실행 결과 2
> Task :moosong:tasks

------------------------------------------------------------
Tasks runnable from project ':moosong'
------------------------------------------------------------

Build tasks
-----------
(..생략..)

Documentation tasks
-------------------
(..생략..)

Help tasks
----------
(..생략..)

Verification tasks
------------------
(..생략..)



  1. 이미지 출처 : https://docs.gradle.org/current/userguide/part1_gradle_init.html 

Comments