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

리자몽님의 프로필 이미지
리자몽

작성한 질문수

실전! Querydsl

JPQL vs Querydsl 강의 중에 startQuerydsl 테스트 코드 실행 시 에러질문이요

작성

·

560

0

안녕하세요 JPQL vs Querydsl 부분 강의를 듣던 중에

startQuerydsl() 테스트를 실행했는데 에러가 발생해서 질문 드립니다.

현재 cannot find symbol class generated 에러가 발생합니다.

화면 캡처 2022-11-12 171307.png검색 해본 결과

Annotation Processor 문제 같아서

Gradle Imported 에 있는 querydsl.main 폴더를

Default 폴더로 이동 시켰습니다.

화면 캡처 2022-11-12 171238.png현재 Default 폴더로 이동된 상황입니다.

스크린샷_20221112_052634.png

이후에 compileQuerydsl 을 빌드하고 다시 startQuerydsl()을 실행하면 동일한 에러가 발생합니다.

스크린샷_20221112_052722.png그리고 gradle을 아예 새로고침하면

querydsl.main 파일은 다시 Gradle Imported 로 돌아갑니다..

 

현재 startQuerydsl 코드는 다음과 같습니다.

@Test
public void startQuerydsl() {
    JPAQueryFactory queryFactory = new JPAQueryFactory(em);
    QMember m = new QMember("m");

    Member findMember = queryFactory
            .select(m)
            .from()
            .where(m.username.eq("member1"))
            .fetchOne();

    assertThat(findMember.getUsername()).isEqualTo("member1");
}

 

또한 제가 Spring Boot 2.6 대 버전을 사용하고 있어서 build.gradle에 파일을 다음과같이 수정하고 아주 잘 돌아가는 상태였습니다.

buildscript {
    ext {
        queryDslVersion = "5.0.0"
    }
}

plugins {
    id 'org.springframework.boot' version '2.6.13'
    id 'io.spring.dependency-management' version '1.0.15.RELEASE'
    //querydsl 추가
    id "com.ewerk.gradle.plugins.querydsl" version "1.0.10"
    id 'java'
}

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

configurations {
    compileOnly {
        extendsFrom annotationProcessor
    }
}

repositories {
    mavenCentral()
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    //querydsl 추가
//    implementation 'com.querydsl:querydsl-jpa'
    implementation "com.querydsl:querydsl-jpa:${queryDslVersion}"
    annotationProcessor "com.querydsl:querydsl-apt:${queryDslVersion}"
    implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.5.8'

    compileOnly 'org.projectlombok:lombok'
    runtimeOnly 'com.h2database:h2'
    annotationProcessor 'org.projectlombok:lombok' // 이거 Settins 에 Annotation Processor 에 Enable annotation processing 체크 해야한다.
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

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

//querydsl 추가 시작
def querydslDir = "$buildDir/generated/querydsl"
querydsl {
    jpa = true
    querydslSourcesDir = querydslDir
}
sourceSets {
    main.java.srcDir querydslDir
}
configurations {
    querydsl.extendsFrom compileClasspath
}
compileQuerydsl {
    options.annotationProcessorPath = configurations.querydsl
}
//querydsl 추가 끝

 

대체 왜 이런 에러가 발생하고 해결방법은 무엇일까요?

감사합니다.

답변 2

0

공유해주신 프로젝트 다운받아서, DB만 메모리 모드로 변경하고 gradle task로 qclass 생성 후 애플리케이션을 실행했습니다. 잘 동작하고 있습니다.

모종의 이유로 프로젝트가 꼬이신 것 같은데, file - invalidate caches를 실행 하신 후 다시 실행해보시겠어요? 그래도 안 된다면 프로젝트를 새로 만들어보시는 것도 시도 부탁드립니다.

image

0

안녕하세요. 리자몽님, 공식 서포터즈 David입니다.

기존에 생성된 qclass를 모두 지우고, 새롭게 생성하신 뒤 진행하셔도 동일한지 확인 부탁드립니다.

감사합니다.

리자몽님의 프로필 이미지
리자몽
질문자

답변 감사합니다.

기존에 생성된 QHello, QMember, QTeam 을 모두 지우고

다시 compileQuerydsl을 빌드 시키고 실행 해봤으나 여전히 동일한 에러가 발생합니다.

이렇게 실행하고

querydsl.main 파일의 위치를 다시 확인해 본결과 현재 Gradle Imported이 아니라 Default에 있습니다.

image결국엔 아직 동일한 에러가 발생합니다.

 

참고로 현재 Gradle을 Reload 하면

다시 querydsl.main 돌더가 Default가 아닌 Gradle Imported로 넘어갑니다.
image

또한 제가 참고한 사이트는 이 곳 입니다.

https://bgpark.tistory.com/157

아래 가이드를 따라 프로젝트를 공유해주실 수 있으실까요?
-----
전체 프로젝트를 압축해서 구글 드라이브로 공유해서 링크를 남겨주세요.
구글 드라이브 업로드 방법은 다음을 참고해주세요.

https://bit.ly/3fX6ygx


업로드시 권한 문제 꼭 확인해주세요
공유 기본 설정은 비공개로 되어 있어 업로드 한 본인 계정만 접근이 가능합니다.

본인 계정이 아닌 링크를 통한 타 계정 접근이 가능한지 확인하는 방법은 업로드 한 구글 계정을 로그아웃하고 링크를 접속하여 "액세스 권한 요청 화면"이 출력되는지 확인을 해주세요.

리자몽님의 프로필 이미지
리자몽
질문자

답변 감사합니다.

현재 보내주신

https://bit.ly/3fX6ygx

링크가 Something's wrong here. 메시지로 열리지 않으므로

해당 링크가 열려야지 가이드라인을 따를 수 있을 것 같습니다...

일단 계속 클릭을 하거나 세션을 지우거나 해보고 있는데..

원활한 링크를 다시 공유해주시면 감사하겠습니다.

원활한 링크인데 지금 사용중인 시스템에서는 잘 안되시나 봅니다.

PC, 모바일 두 기기로 페이지 정상접속 확인 후 답변 남깁니다.

사용중인 PC에서 안되신다면 모바일로 확인 되실까요?

 

리자몽님의 프로필 이미지
리자몽
질문자

다행히 지금은 해당링크가 제대로 열려서

가이드라인에 맞게 다음 링크에 공유했습니다.

https://drive.google.com/file/d/1_UR6PGKSx_w_EezGJCjNS2Sw7m5zVMwX/view

감사합니다.

윗 댓글에 안내드린대로, 권한(액세스) 관련 문제로 다운로드 불가능합니다. 댓글 내용을 참고하셔서 권한 문제를 해결해주시겠어요?

리자몽님의 프로필 이미지
리자몽
질문자

죄송합니다.

권한 문제 해결하고 다시 올립니다.

https://drive.google.com/file/d/1_UR6PGKSx_w_EezGJCjNS2Sw7m5zVMwX/view

리자몽님의 프로필 이미지
리자몽

작성한 질문수

질문하기