Gradle에서 Multi-Module 프로젝트는 여러 개의 서브 프로젝트(subproject)로 구성된 프로젝트를 의미한다. 이를 통해 코드의 재사용성을 높이고, 빌드 성능을 향상시키며, 모듈별 독립적인 개발과 배포가 가능하다.
core 모듈을 만들어 여러 애플리케이션에서 사용할 수 있다.api 모듈을 하나의 라이브러리(JAR)로 배포하고, app 모듈에서 이를 의존성으로 사용할 수 있다.root-project/
├── build.gradle.kts // 루트 프로젝트 설정
├── settings.gradle.kts // 서브 프로젝트 정의
├── app/ // 앱 모듈
│ ├── build.gradle.kts
│ ├── src/main/java/com/example/app
│ └── src/test/java/com/example/app
├── core/ // 공통 모듈
│ ├── build.gradle.kts
│ ├── src/main/java/com/example/core
│ └── src/test/java/com/example/core
└── api/ // API 모듈
├── build.gradle.kts
├── src/main/java/com/example/api
└── src/test/java/com/example/api
settings.gradle.kts 설정루트 프로젝트에서 서브 모듈을 정의해야 한다.
rootProject.name = "multi-module-project"
// 서브 모듈 등록
include("app")
include("core")
include("api")
build.gradle.kts 설정build.gradle.kts루트 프로젝트에서는 공통 설정을 관리할 수 있다.
plugins {
kotlin("jvm") version "1.9.0"
}
allprojects {
repositories {
mavenCentral()
}
}
core 모듈의 build.gradle.kts공통 기능을 제공하는 모듈이다.
plugins {
kotlin("jvm")
}
dependencies {
implementation("org.jetbrains.kotlin:kotlin-stdlib")
}
api 모듈의 build.gradle.kts다른 모듈을 사용할 수 있도록 core를 의존성으로 추가할 수 있다.
plugins {
kotlin("jvm")
}
dependencies {
implementation(project(":core")) // core 모듈 의존성 추가
}
app 모듈의 build.gradle.kts최종 실행 가능한 애플리케이션 모듈이다.
plugins {
kotlin("jvm")
application
}
application {
mainClass.set("com.example.app.MainKt")
}
dependencies {
implementation(project(":core")) // core 모듈 사용
implementation(project(":api")) // api 모듈 사용
}
./gradlew build
예를 들어 app 모듈만 빌드하려면:
./gradlew :app:build
app 모듈 실행:
./gradlew :app:run
settings.gradle.kts에서 include("모듈명")을 추가하여 서브 프로젝트를 설정한다.project(":모듈명")으로 참조할 수 있다.Multi-Module Gradle을 활용하면 대규모 프로젝트에서도 효율적인 개발이 가능하다.