Home ❗️ERROR - querydsl.jpa.impl does not exist
Post
Cancel

❗️ERROR - querydsl.jpa.impl does not exist




🧶 Trouble


간단한 QueryDsl 테스트 코드 작성후 테스트를 실행해보는 중 에러 발생

error

  1. com.querydsl.jpa.impl.JPAQueryFactor
  2. org.springframework.transaction.annotation.Transactional
  3. javax.persistence.EntityManager


import는 잘 되어 있었다.

import


내 build.gradle

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
buildscript {
	ext {
		queryDslVersion = "5.0.0"
	}
}

plugins {
	id 'java'
	id 'org.springframework.boot' version '2.7.0'
	id 'io.spring.dependency-management' version '1.1.0'

	// querydsl 추가
	id "com.ewerk.gradle.plugins.querydsl" version "1.0.10"
	// 추가 하지 않아도 되지만, lombok과 querydsl 같이 사용시 문제가 발생할 수 있어 추가
	// **> id "io.franzbecker.gradle-lombok" version "3.0.0"

}

group = 'hello'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'


configurations {
	compileOnly {
		extendsFrom annotationProcessor
	}
}

repositories {
	mavenCentral()
}

dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
	implementation 'org.springframework.boot:spring-boot-starter-web'
//	implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'

	//querydsl 추가
	implementation "com.querydsl:querydsl-jpa:${queryDslVersion}"
	annotationProcessor "com.querydsl:querydsl-apt:${queryDslVersion}"

	compileOnly 'org.projectlombok:lombok' 
	runtimeOnly 'com.h2database:h2' // DB 없이 여러가지 테스트 가능
	annotationProcessor 'org.projectlombok:lombok'
	testCompileOnly 'org.projectlombok:lombok'
	testAnnotationProcessor 'org.projectlombok:lombok'

	testImplementation('org.springframework.boot:spring-boot-starter-test') {  // JUnit 5 가 기본 내장
	}

}

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 추가 끝





✂️ Shooting



# 시도 0


(찾아본 해결 방법 중 이미 적용되어 있는 내용)

  • gradle 설정에서 Build and run using: IntelliJ IDEA 로 변경
  • spring boot 2.6 이상, Querydsl 5.0 지원 방법에 따라 build.gradle 작성



# 시도 1


검색해보니

lombok과 querydsl 을 같이 쓰게 되면 문제가 생길 수 있다는 글을 많이 보았다.

build.gradle에 아래 내용의 plugin을 추가해 보았다.

1
id "io.franzbecker.gradle-lombok" version "3.0.0"

안된다



# 시도 2


querydslDir 부분을 수정해 해결하셨다는 글을 보아서 이것도 시도해 보았다.

1
2
3
4
5
(원래)
def querydslDir = "$buildDir/generated/querydsl"

(수정) 
def querydslDir = 'src/main/generated'

안된다 ㅇㅅㅇ



# 시도 3


intelliJ에서 gradle로 빌드할 경우

같은 현상이 나타나는 분이 많은가 보다.


settings - gradle 에서 build를 intelliJ 로 변경한 다음

나는 계속 오른쪽 바에 있는 gradle을 눌러 빌드하고 있었다;;


gradle 없이는 빌드 해보지 않아서.. 방법을 찾아보아야겠다!

방법은 상단바에 있는 빌드를 눌러하면 된는 것이었다.

그 방법으로 다시 빌드를 해보았지만 지금 문제인 테스트부분에서 에러가 나서 빌드가 되지 않았다;;


테스트부분을 주석처리하고 다시 빌드 시도!

빌드에 성공했당



🧶 또다른 error ✂️


테스트 코드가 실행되고 있지 않은 것만 확인해서

이번엔 애플리케션이 잘 작동하는지 실행시켜보았는데

여기에도 오류가 뜨고 있었다.

스크린샷

스크린샷

문제는 Q파일에 8, 15번째 줄에 있는 @Generated 어노테이션에서 문제가 발생한 것으로 보인다.

이 문제는 다행이 import 문제였다.

1
2
3
4
5
(원래)
import javax.annotation.processing.Generated;

(수정)
import com.querydsl.core.annotaion.Generated;

querydsl.core로 import를 변경해 주며 이제 실행을 잘 되었다!

이걸로 원래 해결하던 문제는 해결되진 않았다ㅠ



# 시도 4 - 해결


검색중 나와는 좀 다른 내용이지만

혹시나하는 마음에 설정을 바꿔보았다.

된다…

이게 처음 설정해 놓은 상태였고,

스크린샷

혹시나 하는 마음에 체크 하나 눌렀을 뿐인데..

잘 된당…ㅠㅠ

스크린샷 2023-01-07 오후 11 47 31

아래 내용을 읽어보니

intellij모듈과 gradle모듈을 함께 사용하고 있는 지금 상태에서는

꼭 활성화 해주어야 하는 내용으로 보인다ㅠ


테스트 코드 작동으로 문제 해결!! 🥹

스크린샷

참고


그래도 또 하나 해결ㅎㅎ

이제 또 다른 에러를 만나러 가본다..🤣



This post is licensed under CC BY 4.0 by the author.