[Gradle Script] 복잡한 QueryDsl 설정 모아서 불러오기Back-end/Build (Gradle, Maven)2023. 12. 14. 15:23
Table of Contents
코드는 이곳에 :)
https://github.com/progress0407/jvm-tools-2.7.x/tree/main/querydsl-sample
코틀린을 도입하기로 결정했는데 자바 코드를 유지할 부분(공통)과 코틀린 코드를 분리할 일이 생겼다
그때 사용한 방법이다
참고로 나의 경우 자바를 사용하는 모듈, 코틀린 사용 모듈을 모두 나누었다
(즉 한 모듈에 자바, 코틀린이 있는 경우는 없었다)
참고로 코틀린, 롬복, QueryDsl이 모두 있는 상황에서 정상 동작하게 만드는 것은 너무나도 힘들다...
여러분은 굳이 그렇게 하지 말고 나처럼 모듈별로 개별 적용하면 그게 차라리 마음의 건강에 좋을 것이다...
Gradle 스크립트
우선 아래와 같은 Java, Kotlin 별 QueryDSL 적용을 위한 스크립트를 정의한다
java-querydsl-setting.gradle
/**
* QueryDSL 5.0.0+ 에서 사용
* <br>
* Spring Boot 2.7.x 에서 호환됨을 확인
* <br>
* Spring Boot 3.x 에서는 다른 설정 필요
*/
ext {
queryDslVersion = '5.0.0'
}
dependencies {
// Lombok
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
// QueryDSL
api 'com.querydsl:querydsl-jpa:5.0.0'
annotationProcessor 'com.querydsl:querydsl-apt:5.0.0:jpa'
annotationProcessor 'javax.annotation:javax.annotation-api:1.3.2'
annotationProcessor 'javax.persistence:javax.persistence-api:2.2'
}
kotlin-querydsl-setting.gradle
/**
* Kotlin 에서 QueryDsl을 호환하기 위한 설정
*/
dependencies {
implementation 'com.querydsl:querydsl-jpa:5.0.0'
implementation 'com.querydsl:querydsl-apt:5.0.0'
kapt 'com.querydsl:querydsl-apt:5.0.0:jpa'
annotationProcessor 'com.querydsl:querydsl-apt:5.0.0:jpa'
}
그리고 각각 필요한 스크립트를 불러오면 된다
plugins {
id 'org.jetbrains.kotlin.plugin.allopen' // version "$kotlinVersion"
id 'org.jetbrains.kotlin.kapt' // version "$kotlinVersion" // Kotlin Annotation Processing Tool
}
def rootPath = rootProject.projectDir
subprojects {
bootJar.enabled = true
jar.enabled = true
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
runtimeOnly 'com.h2database:h2'
}
allOpen {
annotation("javax.persistence.Entity")
annotation("javax.persistence.Embeddable")
annotation("javax.persistence.MappedSuperclass")
}
}
project(':querydsl-sample:java-module') {
apply from: "$rootPath/gradle-script/java-querydsl-setting.gradle"
}
project(':querydsl-sample:kotlin-module') {
apply plugin: 'org.jetbrains.kotlin.kapt'
apply from: "$rootPath/gradle-script/kotlin-querydsl-setting.gradle"
}
이렇게 하면 아래와 같은 장점들이 생긴다
관리가 편하다
모듈별로 해당 스크립트만 import하면 되니까 세상 편하다. 살맛난다
성능 향상에 용이하다
내가 관리하는 프로젝트의 경우
모든 모듈에 querydsl이 적용되어 있었는데
이렇게 되면 모듈마다 querydsl을 generated 하게 된다...
아쉬운 점
저것이 gradle 파일이 아닌 plugin처럼 보다 더 손쉽게 적용 가능한 방법으로 개선을 하면 좋을 것 같다는 생각을 했다
실제로 내가 들은 gradle heros 강의에 plugin 프로그램을 만드는 법을 짧게 소개하는 것이 있었다
(이후로 다른 일들이 몰려와서 고민에 대한 개선을 현실화하지는 못했다ㅠ)
'Back-end > Build (Gradle, Maven)' 카테고리의 다른 글
[Test Code, Gradle] 각 모듈에 Test Fixture를 공유하고 싶을 때 (0) | 2023.12.10 |
---|---|
[생각 정리] 내가 경험했던 뼈아픈 Gradle 멀티모듈 설계 (0) | 2023.11.28 |
Gradle 다시 보기 (정리중) (0) | 2023.09.10 |
[Gradle] 기존의 프로젝트의 이름(group, artifact) 바꾸기 (0) | 2023.06.13 |
Gradle dependency 분리 하면서 생긴 문제, 해결 (0) | 2023.05.28 |
@philo0407 :: Philo의 다락방
hi hello... World >< 가장 아름다운 하나의 해답이 존재한다
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!