강의

멘토링

로드맵

Inflearn brand logo image

인프런 커뮤니티 질문&답변

정중한 개구리님의 프로필 이미지
정중한 개구리

작성한 질문수

querydsl 추가시 실행오류가 뜹니다..

작성

·

35

0

// buildscript 추가
buildscript {
    ext {
       queryDslVersion = "5.0.0"
    }
}
// buildscript 추가 끝

plugins {
    id 'java'
    id 'org.springframework.boot' version '3.2.5'
    id 'io.spring.dependency-management' version '1.1.5'
    id 'com.ewerk.gradle.plugins.querydsl' version '1.0.10'  // QueryDSL 플러그인
}

group = 'com.example'
version = '0.0.1-SNAPSHOT'

configurations {
    compileOnly {
       extendsFrom annotationProcessor
    }
}

repositories {
    mavenCentral()
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
    implementation 'org.springframework.boot:spring-boot-starter-validation'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    compileOnly 'org.projectlombok:lombok'
    runtimeOnly 'com.h2database:h2'
    annotationProcessor 'org.projectlombok:lombok'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    testRuntimeOnly 'org.junit.platform:junit-platform-launcher'

    // 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"

}
tasks.named('test') {
    useJUnitPlatform()
}

//querydsl 추가
def querydslDir = "$buildDir/generated/querydsl"

querydsl {
    jpa = true
    querydslSourcesDir = querydslDir
}
sourceSets {
    main.java.srcDir querydslDir
}
compileQuerydsl{
    options.annotationProcessorPath = configurations.querydsl
}
configurations {
    compileOnly {
       extendsFrom annotationProcessor
    }
    querydsl.extendsFrom compileClasspath
}

//querydsl 추가 끝

우선 제 build.gradle 상태이구요 Tasks에서 clean후 compileQuerydsl로 Q타입 생성합니다.

compileJava로 하면 error: Attempt to recreate a file for type com.example.demo.entity.QMember << 이런 오류가뜹니다.

 

그리고 어플리케이션 실행히시키면 error: Could not find class file for 'com.example.demo.entity.Member'. < 이런오류가 나오네요.. 해결방법 부탁드립니다..

답변 1

0

안녕하세요, 인프런 AI 인턴입니다.

정중한 개구리님께서 겪고 계신 문제는 build.gradle 구성에서 QueryDSL 관련 설정이 충돌하거나 누락된 경우일 수 있습니다. 아래 몇 가지 해결 방법을 시도해 보세요.

  1. annotationProcessorcompileOnly의 충돌 문제:

    • compileOnly 설정에 annotationProcessor를 추가했습니다만, 이 부분이 불필요할 수 있습니다. 두 설정이 충돌 없이 작동하도록 주의가 필요합니다. annotationProcessor를 독립적으로 사용해 보세요.
  2. compileQuerydsl 설정 확인:

    • compileQuerydslannotationProcessorPath를 올바르게 설정했는지 확인하세요. 주석 처리 및 다른 설정과 중복되지 않도록 확인합니다.
  3. sourceSets 설정 추가:

    • sourceSets에서 설정한 querydslDir가 제대로 정의되어 있는지 확인하세요. 필요시 경로를 직접 출력하여 유효한지 확인해 보세요.
  4. 기존에 생성된 Q 타입 삭제:

    • 오류발생 시 기존에 생성된 파일을 지우고 새롭게 파일을 생성해야 할 경우도 있습니다. build directory는 지우고 새롭게 compileQuerydsl로 Q타입을 생성해 보세요.

위의 조언을 통해 문제가 해결되지 않는다면, 각 의존성 버전의 호환성을 다시 한번 확인하고 annotationProcessorclasspath 관련 설정을 재조정하는 것도 딜레이가 될 수 있습니다.

도움이 되셨기를 바랍니다. 추가적인 질문 있으시면 언제든 말씀해 주세요. 😊

정보 출처: Spring Boot Reference Documentation v3.1.5 Spring Data JPA - Reference Documentation v3.1.5

compileonly 지우고 해봐도 error: Could not find class file for 'com.example.demo.entity.Member'. 이런 에러코드가 나옵니다.. 아마 querydsl 부분때문에 오류가 나는거같은데요

 

어떻게해야하나요.. 그냥 오류없이 작동하는 bulid.gradle 코드를 가져와주실수없나요..

정중한 개구리님의 프로필 이미지
정중한 개구리

작성한 질문수

질문하기