현재 나의 blog package 구성은 이와같다.
근데 예시 자료를 하나의 프로젝트에서 관리하는게 눈에 잘 안들어와서 예시 자료를 모듈화를 시키려고 한다.
우선 settings.gradle.kts 파일에 들어가면 현재 아래처럼 구성되어 있다.
rootProject.name = "demo"
blog 프로젝트에서 blog 하위에 modules 폴더에 모듈 프로젝트를 생성 시킨다.
여러개 모듈을 생성하기 위해 exam-module도 만들어 보았다.
그러면 총 2개의 모듈이 생성 된 것이 확인이 된다.
src를 제외하고 모두 새롭게 셋팅하도록 하겠습니다. src를 남기고 모두 삭제해 주세요.
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
plugins {
kotlin("jvm") version Versions.kotlin
kotlin("kapt") version Versions.kotlin
id("io.spring.dependency-management") version Versions.springDependencyManagement
id("org.jetbrains.kotlin.plugin.spring") version Versions.kotlin
}
allprojects {
group = "com.example"
repositories {
mavenCentral()
}
}
subprojects {
apply {
plugin("kotlin")
plugin("kotlin-kapt")
plugin("io.spring.dependency-management")
plugin("kotlin-spring")
}
dependencies {
implementation("com.fasterxml.jackson.module:jackson-module-kotlin")
implementation("org.jetbrains.kotlin:kotlin-reflect")
// junit
testImplementation("org.junit.jupiter:junit-jupiter")
}
tasks {
withType<KotlinCompile> {
kotlinOptions {
freeCompilerArgs = listOf("-Xjsr305=strict")
jvmTarget = "1.8"
}
}
withType<JavaCompile> {
sourceCompatibility = "1.8"
targetCompatibility = "1.8"
}
withType<Test> {
useJUnitPlatform()
}
}
}
주어진 코드는 Kotlin과 Spring 프레임워크를 사용하는 Gradle 프로젝트의 빌드 스크립트입니다. 이 빌드 스크립트는 여러 하위 프로젝트(subprojects)에 공통적으로 적용되며, Kotlin 및 Spring 관련 플러그인을 설정하고 종속성을 관리합니다.
플러그인 설정:
모든 프로젝트에 대한 공통 설정:
하위 프로젝트(subprojects)에 대한 설정:
settings.gradle.kts는 module 인식할 수 있도록 셋팅할 수 있는 설정 파일이다.
rootProject.name = "blog"
listOf(
"exam-retry",
"exam-module",
).forEach {
include(it)
project(":$it").projectDir = File("$rootDir/modules/$it")
}
이 코드는 listOf에 나열된 하위 프로젝트를 루트 프로젝트의 하위 프로젝트로 설정하고, 각 하위 프로젝트의 디렉토리를 지정하여 구조적으로 프로젝트를 구성합니다. 이렇게 설정하면 Gradle은 루트 프로젝트와 하위 프로젝트 간의 의존성을 적절히 처리할 수 있게 됩니다.
include(it): 현재 하위 프로젝트를 포함시킵니다. it은 listOf에 나열된 각 하위 프로젝트 이름입니다. 예를 들어, "exam-retry"와 "exam-module"을 포함합니다.
project(":$it").projectDir = File("$rootDir/modules/$it"): 하위 프로젝트의 프로젝트 디렉토리를 설정합니다.
project(":$it")는 지정된 이름(it)을 가진 하위 프로젝트에 대한 Project 객체를 가져옵니다. projectDir은 해당 하위 프로젝트의 디렉토리를 나타냅니다.
File("$rootDir/modules/$it")는 루트 디렉토리(rootDir) 아래의 "modules" 디렉토리에 해당 하위 프로젝트의 이름으로 된 하위 디렉토리를 지정합니다. 따라서 각 하위 프로젝트는 "modules" 디렉토리 안에 위치하게 됩니다.
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
plugins {
id("org.springframework.boot") version Versions.springBoot
kotlin("plugin.jpa") version Versions.kotlin
}
dependencies {
implementation("org.springframework.boot:spring-boot-starter-data-jpa")
implementation("org.springframework.boot:spring-boot-starter-web")
// retry
implementation("org.springframework.retry:spring-retry")
runtimeOnly("com.h2database:h2")
testImplementation("org.springframework.boot:spring-boot-starter-test")
}
각 프로젝트별로 build.gradle.kts를 셋팅했으면 기본적으로 작성해야 하는 부분이 많아서 불편 했지만, 이와같이 공통으로 사용하는 부분은 하나로 작성하고, 하위 모듈별로 필요한 디펜던시만 붙이면 되서 깔끔하게 작성할 수 있다.
build 이후 모듈이 정상적으로 인식이 되는지 확인하고 실행해보면 끝~