목차
- build.gradle 코드
- 코드 설명
build.gradle (Groovy)
plugins {
id 'java'
id 'org.springframework.boot' version '3.2.2'
id 'io.spring.dependency-management' version '1.1.4'
id "com.ewerk.gradle.plugins.querydsl" version "1.0.10"
}
java {
sourceCompatibility = "17"
}
repositories {
mavenCentral()
}
dependencies {
implementation (
"org.springframework.boot:spring-boot-starter-data-jpa",
"org.springframework.boot:spring-boot-starter-web",
"org.projectlombok:lombok:1.18.28",
"org.postgresql:postgresql:42.6.2",
"com.querydsl:querydsl-jpa:5.0.0:jakarta",
"org.geotools.jdbc:gt-jdbc-postgis:26.5",
"org.hibernate.orm:hibernate-spatial:6.4.8.Final"
)
runtimeOnly (
"org.postgresql:postgresql",
)
annotationProcessor (
"org.projectlombok:lombok:1.18.28",
"com.querydsl:querydsl-apt:5.0.0:jakarta",
"jakarta.annotation:jakarta.annotation-api",
"jakarta.persistence:jakarta.persistence-api"
)
}
compileJava.dependsOn("clean")
compileQuerydsl {
options.annotationProcessorPath = configurations.querydsl
}
tasks.withType(JavaCompile).configureEach {
doFirst {
def generatedDir = file("$buildDir/generated/")
if (generatedDir.exists()) {
generatedDir.deleteDir()
}
}
}
def querydslDir = "$buildDir/generated/querydsl"
querydsl {
jpa = true
querydslSourcesDir = querydslDir
}
sourceSets {
main.java.srcDir querydslDir
}
configurations {
compileOnly {
extendsFrom annotationProcessor
}
querydsl.extendsFrom compileClasspath
}
test {
useJUnitPlatform()
}
bootJar {
archiveFileName = 'geolabserver.jar'
}
query dsl은 빌드하고 나서 build 폴더 하위에 Q{엔티티명}의 파일이 생긴다.
(내 경우엔 build/generated/annotationProcessor/java/main/{패키지명/{엔티티경로}})
① 빌드를 실행하면 compileJava.dependsOn("clean")
이 코드에 따라 이전의 빌드 결과물을 제거하고
② compileQuerydsl {}
QueryDSL 코드를 컴파일하는 데 필요한 설정을 하는 블록
③ options.annotationProcessorPath = configurations.querydsl
QueryDSL을 사용하여 생성된 코드를 컴파일할 때 필요한 annotation processor의 경로를 설정
④ JavaCompile
타입의 모든 태스크의 설정을 변경한다. doFirst {}
그 작업을 수행하기 전에 generated 폴더가 존재한다면 삭제
def querydslDir = "$buildDir/generated/querydsl"
querydsl {
jpa = true
querydslSourcesDir = querydslDir
}
⑤ QueryDSL 플러그인의 설정
jpa = true JPA
엔터티에 대한 QueryDSL 클래스를 생성 (== Q{엔티티명} 클래스 생성 ==쿼리 타입 클래스 생성)
querydslSourcesDir = querydslDir
생성된 QueryDSL 클래스들을 저장할 디렉토리를 지정
sourceSets {
main.java.srcDir querydslDir
}
⑥ 이 설정은 Gradle 빌드 시 sourceSets
를 통해 main 소스 세트의 Java
소스 디렉토리를 추가로 지정해서 QueryDSL이 생성한 클래스들이 소스 세트에 포함되어 컴파일되도록 한다.
예를 들면 entity 경로가 java/main/{패키지명}/model 이라면
빌드 수행 후, build/generated/sources/annotationProcessor/java/main/{패키지명}/model/Q{엔티티명} 이렇게 소스 세트 지정해준다는 말이다.
configurations {
compileOnly {
extendsFrom annotationProcessor
}
querydsl.extendsFrom compileClasspath
}
⑦ compileOnly
컴파일 시에만 필요한 작업
extendsFrom annotationProcessor
annotationProcessor 구성에 있는 의존성 추가
compileClasspath
는 빌드 폴더 하위에 있고 Gradle 빌드 시에 컴파일 및 실행에 필요한 모든 클래스와 리소스가 포함된 클래스 패스
querydsl.extendsFrom compileClasspath
이건 querydsl이 이것을 상속받겠다는 말이다.
'Software Engineering > [BE] Spring Boot (Java)' 카테고리의 다른 글
[Spring Boot] 일관적인 API 응답 RestResult, RestError (0) | 2024.06.26 |
---|---|
[Spring Boot] API 응답에 null 값 포함 안 시키는 어노테이션 (1) | 2024.06.22 |
[Spring Boot] H2GIS와 QueryDSL을 사용한 단위 테스트 (0) | 2024.06.22 |