현상
사내에서 새로운 API 제작을 위해 querydsl을 적용하였으나 Q 클래스를 찾지 못하는 에러가 발생하였다.
정확히는 Unable to load class 'com.mysema.codegen.model.Type' 에러였다.
원인
https://www.inflearn.com/questions/355723
구글링을 통해 해당 링크를 찾아서 해결법을 적용하였다. gradle의 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
}
해당 설정을 적용하였으나 여전히 관련 에러가 났다. 그래서 querydslDir의 경로를 확인해보니 아예 Q 클래스들을 만들지 못하는 것을 발견했다.
그래서 도대체 뭐가 원인일까 싶어 querydsl, spring boot 버전을 확인해보니 여기에 문제가 있었다.
해결
https://wangtak.tistory.com/m/44
해당 링크를 확인해본 결과 스프링부트 2.6이상, Querydsl 5.0 에서는 설정 방식에 차이가 있었다.
내가 진행했던 프로젝트는 스프링부트 2.6 이상이라 querydsl 5.0 이상을 적용해야했다.
dependencies {
implementation "com.querydsl:querydsl-jpa:${queryDslVersion}"
annotationProcessor "com.querydsl:querydsl-apt:${queryDslVersion}"
}
위와 같이 querydsl만 추가하는것이 아니라 apt 또한 추가해야했다.
추가한 뒤에는 아무런 문제없이 빌드 완료되었다.
'프로그래밍 > 오류보고' 카테고리의 다른 글
[JUnit] DataJpaTest 중 dataSource 관련 에러 (0) | 2022.09.28 |
---|---|
[JUnit] @BeforeAll 사용시 에러 (0) | 2022.06.30 |
[Spring]Intellij에서 스프링 devtools이 작동하지 않는다면 (0) | 2022.06.14 |