728x90
root 모듈에는 src폴더를 없애고 build.gradle.kts에 모든 프로젝트들에 대한 설정(allprojects), 하위 프로젝트들에 대한 설정(subprojects)를 해주고 새로운 모듈 하나를 만들어주었다.
새로운 모듈의 build.gradle.kts는 아래와 같이 비워놓았다.
plugins {}
version = "0.0.1"
dependencies {}
그리고 build하니 오류 발생
➡️원인
main메서드가 없는 모듈을 빌드하려고 할 때 생기는 에러.
main메서드는 서브 모듈인 api에만 존재하고 최상위 root에는 지워서 없다.
➡️해결
root module의 build.gradle에 아래 코드를 작성해주면 된다고 했는데 나는 빨간색으로 뜨면서 인식이 안 된다.
bootJar {
enabled = false
}
jar {
enabled = true
}
이 코드는 자바로 생성된 build.gradle에 사용하나보다.
root의 build.gradle이 아닌 하위 모듈의 build.gradle.kts(:api) 코드 수정
import org.springframework.boot.gradle.tasks.bundling.BootJar
plugins {}
version = "0.0.1"
dependencies {}
val jar: Jar by tasks
val bootJar: BootJar by tasks
bootJar.enabled = false
jar.enabled = true
빌드 오류 해결
+ 10/13 추가
모든 모듈들의 build.gradle.kts에 넣어주는게 상당히 번거롭게 느껴졌다.
그러다가 최상위 폴더의 build.gradle.kts에 설정해주는 방법을 찾았다 !
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
plugins {
kotlin("jvm") version "1.6.21"
kotlin("plugin.spring") version "1.6.21" apply false
kotlin("plugin.jpa") version "1.6.21" apply false
id("org.springframework.boot") version "2.7.16" apply false
id("io.spring.dependency-management") version "1.0.15.RELEASE" apply false
}
repositories {
mavenCentral()
}
allprojects {
group = "com.zerobase"
repositories {
mavenCentral()
}
}
subprojects {
apply {
plugin("org.jetbrains.kotlin.jvm")
plugin("org.jetbrains.kotlin.plugin.spring")
plugin("org.springframework.boot")
plugin("io.spring.dependency-management")
}
tasks.withType<KotlinCompile> {
kotlinOptions {
freeCompilerArgs = listOf("-Xjsr305=strict")
jvmTarget = "11"
}
}
tasks.withType<Test> {
useJUnitPlatform()
}
dependencies {
implementation("org.springframework.boot:spring-boot-starter")
implementation("org.jetbrains.kotlin:kotlin-reflect")
implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
testImplementation("org.springframework.boot:spring-boot-starter-test")
}
}
project(":api") {
dependencies {
implementation(project(":domain"))
}
}
project(":consumer") {
dependencies {
implementation(project(":domain"))
}
}
project(":domain") {
val jar: Jar by tasks
val bootJar: org.springframework.boot.gradle.tasks.bundling.BootJar by tasks
bootJar.enabled = false
jar.enabled = true
}
이렇게 각 하위 모듈들을 project로 끌고와서 그 안에 다 넣어주면 된다 !
참고
https://junuuu.tistory.com/627
728x90