작성
·
560
0
안녕하세요 JPQL vs Querydsl 부분 강의를 듣던 중에
startQuerydsl() 테스트를 실행했는데 에러가 발생해서 질문 드립니다.
현재 cannot find symbol class generated 에러가 발생합니다.
검색 해본 결과
Annotation Processor 문제 같아서
Gradle Imported 에 있는 querydsl.main 폴더를
Default 폴더로 이동 시켰습니다.
현재 Default 폴더로 이동된 상황입니다.
이후에 compileQuerydsl 을 빌드하고 다시 startQuerydsl()을 실행하면 동일한 에러가 발생합니다.
그리고 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를 실행 하신 후 다시 실행해보시겠어요? 그래도 안 된다면 프로젝트를 새로 만들어보시는 것도 시도 부탁드립니다.
아래 가이드를 따라 프로젝트를 공유해주실 수 있으실까요?
-----
전체 프로젝트를 압축해서 구글 드라이브로 공유해서 링크를 남겨주세요.
구글 드라이브 업로드 방법은 다음을 참고해주세요.
https://bit.ly/3fX6ygx
업로드시 권한 문제 꼭 확인해주세요
공유 기본 설정은 비공개로 되어 있어 업로드 한 본인 계정만 접근이 가능합니다.
본인 계정이 아닌 링크를 통한 타 계정 접근이 가능한지 확인하는 방법은 업로드 한 구글 계정을 로그아웃하고 링크를 접속하여 "액세스 권한 요청 화면"이 출력되는지 확인을 해주세요.
답변 감사합니다.
현재 보내주신
링크가 Something's wrong here. 메시지로 열리지 않으므로
해당 링크가 열려야지 가이드라인을 따를 수 있을 것 같습니다...
일단 계속 클릭을 하거나 세션을 지우거나 해보고 있는데..
원활한 링크를 다시 공유해주시면 감사하겠습니다.
원활한 링크인데 지금 사용중인 시스템에서는 잘 안되시나 봅니다.
PC, 모바일 두 기기로 페이지 정상접속 확인 후 답변 남깁니다.
사용중인 PC에서 안되신다면 모바일로 확인 되실까요?
다행히 지금은 해당링크가 제대로 열려서
가이드라인에 맞게 다음 링크에 공유했습니다.
https://drive.google.com/file/d/1_UR6PGKSx_w_EezGJCjNS2Sw7m5zVMwX/view
감사합니다.
답변 감사합니다.
기존에 생성된 QHello, QMember, QTeam 을 모두 지우고
다시 compileQuerydsl을 빌드 시키고 실행 해봤으나 여전히 동일한 에러가 발생합니다.
이렇게 실행하고
querydsl.main 파일의 위치를 다시 확인해 본결과 현재 Gradle Imported이 아니라 Default에 있습니다.
결국엔 아직 동일한 에러가 발생합니다.
참고로 현재 Gradle을 Reload 하면
다시 querydsl.main 돌더가 Default가 아닌 Gradle Imported로 넘어갑니다.
또한 제가 참고한 사이트는 이 곳 입니다.
https://bgpark.tistory.com/157