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
}
복사했습니다!