반응형
🚨 build 시 발생한 에러 메시지
Unable to load class 'javax.persistence.Entity'.
This is an unexpected error. Please file a bug containing the idea.log file.
import com.example.demo.domain.QEntity
❓에러 발생 이유
Spring 버전과 QueryDSL의 설정 차이로 발생하게 되는 에러 메시지입니다.
Spring 2.x 버전에서 Spring 3.x 버전으로 올라오면서 Java17버전을 사용하게 되었습니다.
JAVA17 버전의 가장 큰 특징 중 하나는 폴더 구조가 javax에서 jakarta로 변경된 것 입니다.
Spring 2.X 버전과 Spring 3.X 버전의 QueryDSL을 implementation하는 방식이 다릅니다.
즉, Spring 3.X 이상의 버전을 사용하고 있는데,
QueryDSL의 설정은 Spring 2.X 버전의 설정을 사용하고 있을 때 나타나는 에러 메시지입니다.
✅ 해결 방법
build.gradle에서 QueryDSL의 implementation 방식을 Spring boot의 버전에 맞게 설정해주시면 됩니다.
각 Spring boot의 버전에 따른 QueryDSL 설정 build.gradle 코드를 참고해 주세요.
Spring boot 3.x 이상 QueryDSL 설정
dependencies {
// queryDSL 설정
implementation "com.querydsl:querydsl-jpa:${dependencyManagement.importedProperties['querydsl.version']}:jakarta"
implementation "com.querydsl:querydsl-core"
implementation "com.querydsl:querydsl-collections"
annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jakarta"
// querydsl JPAAnnotationProcessor 사용 지정
annotationProcessor "jakarta.annotation:jakarta.annotation-api" // java.lang.NoClassDefFoundError (javax.annotation.Generated) 대응 코드
annotationProcessor "jakarta.persistence:jakarta.persistence-api" // java.lang.NoClassDefFoundError (javax.annotation.Entity) 대응 코드
}
// Querydsl 설정부
def generated = 'src/main/generated'
// querydsl QClass 파일 생성 위치를 지정
tasks.withType(JavaCompile) {
options.getGeneratedSourceOutputDirectory().set(file(generated))
}
// java source set 에 querydsl QClass 위치 추가
sourceSets {
main.java.srcDirs += [ generated ]
}
// gradle clean 시에 QClass 디렉토리 삭제
clean {
delete file(generated)
}
Spring boot 2.x QueryDSL 설정
dependencies {
// queryDSL 설정
implementation "com.querydsl:querydsl-jpa"
implementation "com.querydsl:querydsl-core"
implementation "com.querydsl:querydsl-collections"
annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jpa" // querydsl JPAAnnotationProcessor 사용 지정
annotationProcessor "jakarta.annotation:jakarta.annotation-api" // java.lang.NoClassDefFoundError (javax.annotation.Generated) 대응 코드
annotationProcessor "jakarta.persistence:jakarta.persistence-api" // java.lang.NoClassDefFoundError (javax.annotation.Entity) 대응 코드
}
// Querydsl 설정부
def generated = 'src/main/generated'
// querydsl QClass 파일 생성 위치를 지정
tasks.withType(JavaCompile) {
options.getGeneratedSourceOutputDirectory().set(file(generated))
}
// java source set 에 querydsl QClass 위치 추가
sourceSets {
main.java.srcDirs += [ generated ]
}
// gradle clean 시에 QClass 디렉토리 삭제
clean {
delete file(generated)
}
반응형
'JAVA & Spring > Error' 카테고리의 다른 글
[Spring] Could not find build 에러 해결 방법 (0) | 2024.04.10 |
---|---|
[ JPA ][ Spring ] Enum Class 사용시 SQL Error: 1265, SQLState: 01000 에러 해결 방법 (0) | 2024.04.05 |
[Spring][Postman] 400 Bad Request 오류 해결 방법 (0) | 2023.09.05 |
[Spring][Postman] Could not send request 오류 해결 방법 (0) | 2023.08.24 |
[Spiring] Origin 서버가 대상 리소스를 위한 현재의 representation을 찾지 못했거나, 그것이 존재하는지를 밝히려 하지 않 (0) | 2023.08.13 |
댓글