728x90
[JPA] Spring boot 3, QueryDSL build.gradle 환경 설정 방법 끝판왕
우선 build.gradle 파일을 열고, 아래와 같이 플러그인을 설정한다
- 마지막줄의 id "com.ewerk.gradle.plugins.querydsl" version "1.0.10" 을 추가한다
plugins {
id 'java'
id 'org.springframework.boot' version '3.1.1'
id 'io.spring.dependency-management' version '1.1.0'
id "com.ewerk.gradle.plugins.querydsl" version "1.0.10" // Querydsl 플러그인 사용 처리
}
dependencies를 추가한다
dependencies {
...
// QueryDSL 설정 시작
implementation "com.querydsl:querydsl-jpa:5.0.0:jakarta"
annotationProcessor "com.querydsl:querydsl-apt:5.0.0:jakarta"
annotationProcessor "jakarta.annotation:jakarta.annotation-api"
annotationProcessor "jakarta.persistence:jakarta.persistence-api"
// QueryDSL 설정 끝
...
}
마지막으로 Querydsl 프로젝트 build Directory 설정을 추가한다
- 여기서는 build directory로 설정한다, 이렇게 해야 자동으로 git commit시에 무시된다
- 그렇게 처리 하지 않는다면, gitignore에 추가하여야 하기 때문에 불필요하게 하지말자
- 아무도 build 디렉토리로 설정하는 방법에 대해서는 알려주지 않는 것 같다.
// Querydsl 프로젝트 build Directory 설정
def generated = "${project.buildDir}/generated/querydsl"
querydsl {
jpa = true
querydslSourcesDir = generated
}
sourceSets {
main.java.srcDir generated
}
// compileQuerydsl Task 실행시 clean + compileQuerydsl 할 수 있도록 동작 변경
tasks.register('cleanGenerated', Delete) {
delete generated
}
clean.dependsOn(cleanGenerated)
tasks.named("compileQuerydsl").configure {
dependsOn(clean)
}
compileQuerydsl {
options.annotationProcessorPath = configurations.querydsl
}
configurations {
compileOnly {
extendsFrom annotationProcessor
}
querydsl.extendsFrom compileClasspath
}
마무리
- 여기까지 정리한 코드는 아래와 같다!
- 누구는 플러그인 제거하라고 되어있던데 절대 믿지 말고
- 의심하지 말고 이 코드 가져다가 쓰도록build.gradle 파일 전체 코드
- 매번 clean, compileQuerydsl 하는거 귀찮으니까 내가 코드 넣어놨으니 앞으로 compileQuerydsl만 실행하면, 알아서 clean까지 된다
plugins {
id 'java'
id 'org.springframework.boot' version '3.1.1'
id 'io.spring.dependency-management' version '1.1.0'
id "com.ewerk.gradle.plugins.querydsl" version "1.0.10" // Querydsl 플러그인 사용 처리
}
group = 'test'
version = '0.0.1-SNAPSHOT'
java {
sourceCompatibility = '17'
}
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
repositories {
mavenCentral()
}
ext {
set('springCloudVersion', "2022.0.3")
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-jdbc'
implementation 'mysql:mysql-connector-java:8.0.32'
implementation 'org.postgresql:postgresql'
implementation 'org.bgee.log4jdbc-log4j2:log4jdbc-log4j2-jdbc4.1:1.16'
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
implementation 'org.springframework.boot:spring-boot-starter-validation'
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'nz.net.ultraq.thymeleaf:thymeleaf-layout-dialect'
implementation 'org.apache.commons:commons-lang3:3.12.0'
implementation 'org.apache.commons:commons-text:1.10.0'
implementation 'commons-io:commons-io:2.7'
implementation 'io.github.openfeign:feign-okhttp:12.3'
implementation 'io.github.openfeign:feign-httpclient:12.3'
implementation 'org.springframework.cloud:spring-cloud-starter-openfeign'
implementation 'com.google.code.gson:gson:2.8.9'
// jwk implement
implementation 'com.nimbusds:nimbus-jose-jwt:9.2'
implementation 'org.bouncycastle:bcprov-jdk15on:1.69'
implementation 'com.auth0:java-jwt:3.19.1'
implementation 'in.ashwanthkumar:slack-java-webhook:0.0.9'
// QueryDSL 설정 시작
implementation "com.querydsl:querydsl-jpa:5.0.0:jakarta"
annotationProcessor "com.querydsl:querydsl-apt:5.0.0:jakarta"
annotationProcessor "jakarta.annotation:jakarta.annotation-api"
annotationProcessor "jakarta.persistence:jakarta.persistence-api"
// QueryDSL 설정 끝
testImplementation 'org.springframework.boot:spring-boot-starter-test'
compileOnly 'org.projectlombok:lombok'
testCompileOnly 'org.projectlombok:lombok'
testAnnotationProcessor 'org.projectlombok:lombok'
developmentOnly 'org.springframework.boot:spring-boot-devtools'
annotationProcessor 'org.projectlombok:lombok'
annotationProcessor "org.springframework.boot:spring-boot-configuration-processor"
}
dependencyManagement {
imports {
mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
}
}
test {
useJUnitPlatform()
systemProperty "spring.profiles.active", System.getenv("SPRING_PROFILES_ACTIVE") ?: "dev"
}
tasks.named('test') {
useJUnitPlatform()
}
// Querydsl 프로젝트 build Directory 설정
def generated = "${project.buildDir}/generated/querydsl"
querydsl {
jpa = true
querydslSourcesDir = generated
}
sourceSets {
main.java.srcDir generated
}
// compileQuerydsl Task 실행시 clean + compileQuerydsl 할 수 있도록 동작 변경
tasks.register('cleanGenerated', Delete) {
delete generated
}
clean.dependsOn(cleanGenerated)
tasks.named("compileQuerydsl").configure {
dependsOn(clean)
}
compileQuerydsl {
options.annotationProcessorPath = configurations.querydsl
}
configurations {
compileOnly {
extendsFrom annotationProcessor
}
querydsl.extendsFrom compileClasspath
}
LIST