멀티모듈 프로젝트에서 buildSrc가 필요할 때

안상철·2023년 1월 7일
0

Kotlin Spring Boot

목록 보기
11/14
post-thumbnail

요기에 등장했던 buildSrc 모듈에 대해 알아보자!

buildSrc 모듈은 QueryDSL을 사용하기 위해 필요한 kapt라이브러리와 Kotilin DSL을 사용하기 위해 필요한 모듈이다. 그레이들 프로젝트를 생성할 때 자동으로 생성되는 경우가 있고 아닌 경우가 있다던데, 나는 아닌 경우에 해당했기 때문에 직접 만들어줘야 했다.

참고: DSL이란?

의존성 관리와 IDE 자동완성 지원을 위해 kotlin 코드를 가지는 buildSrc 모듈을 만들 수 있다.

구현은 매우 간단하다.

먼저 buildSrc 디렉토리를 만들어주고, 안에 build.gradle.kts 파일을 만들어준다.

plugins {
    // Support convention plugins written in Kotlin. Convention plugins are build scripts in 'src/main' that automatically become available as plugins in the main build.
    `kotlin-dsl`
}

repositories {
    // Use the plugin portal to apply community plugins in convention plugins.
    gradlePluginPortal()
}

dependencies {
    implementation("org.jetbrains.kotlin:kotlin-gradle-plugin")
}

안에 이렇게 작성 해 주고 프로젝트를 한번 빌드 시키면 되는데 여기서 중요한 점은 settings.gradle.kts에 모듈을 기재하지 않는다. 직접적으로 사용할 것은 아니고 의존성과 프로젝트 빌드에만 필요한 모듈이므로..

아무튼 위처럼 작성하고 domain 모듈에서 queryDSL을 사용하거나 KAPT 라이브러리를 사용할 때

plugins {
    id("org.springframework.boot") version "2.5.4"
    id("io.spring.dependency-management") version "1.0.11.RELEASE"
    id("com.ewerk.gradle.plugins.querydsl") version "1.0.10"
    kotlin("jvm")
    kotlin("kapt")
    kotlin("plugin.spring") version "1.5.21"
    kotlin("plugin.jpa") version "1.5.21"
}

이렇게 기재해도 에러가 발생하지 않는다. buildSrc 모듈이 존재하지 않아 kotlinDSL을 사용할 수 없다면 kapt를 죽어도 찾지 못한다.

또 jvm은 버전을 기재하지 않도록 프로젝트에서 강제한다.

이렇게 kotlinDSL을 사용할 수 있게되면

val generatedQuerydslDir = "$buildDir/generated/source/kapt/main"

querydsl {
    library = "com.querydsl:querydsl-apt"
    jpa = true
    querydslSourcesDir = generatedQuerydslDir
}

sourceSets["main"].withConvention(KotlinSourceSet::class) {
    kotlin.srcDir(generatedQuerydslDir)
}

프로젝트 빌드 시 QueryDSL 의존성을 주입할 수 있고 QClass를 생성할 수 있게 된다.

profile
웹 개발자(FE / BE) anna입니다.

0개의 댓글