🧶 Trouble
간단한 QueryDsl 테스트 코드 작성후 테스트를 실행해보는 중 에러 발생
- com.querydsl.jpa.impl.JPAQueryFactor
- org.springframework.transaction.annotation.Transactional
- javax.persistence.EntityManager
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 - 해결
검색중 나와는 좀 다른 내용이지만
혹시나하는 마음에 설정을 바꿔보았다.
된다…
이게 처음 설정해 놓은 상태였고,
혹시나 하는 마음에 체크 하나 눌렀을 뿐인데..
잘 된당…ㅠㅠ
아래 내용을 읽어보니
intellij모듈과 gradle모듈을 함께 사용하고 있는 지금 상태에서는
꼭 활성화 해주어야 하는 내용으로 보인다ㅠ
테스트 코드 작동으로 문제 해결!! 🥹
그래도 또 하나 해결ㅎㅎ
이제 또 다른 에러를 만나러 가본다..🤣