티스토리 뷰
지난번 이클립스(STS)와 인텔리제이에서 QueryDSL Q클래스를 생성해서 잘 동작하는 것을 확인했었다.
[SpringBoot] QueryDSL Q클래스 생성하기 : annotationProcessor 방식 (feat.intelliJ)
프로젝트를 전체 구동시킬때는 querydsl 이 동작하는데는 큰 문제가 없었다. (그래서 별 문제 없는줄...)
근데 인텔리제이 오토빌드를 꺼놨었는데 다시 on 시키면서 빌드가 되지 않는 것을 확인하였다.
빌드시 계속 q클래스쪽에 심볼을 찾을 수 없다는 오류...
이런저런 상황을 찾다보니 querydsl과 lombok이 동작 싱크가 서로 안맞을 때 발생하는 것 같았다.
gradle과 intelliJ 의 버전에 따른 querydsl 생성법이 다르다는 것을 알게 되었고
지금 내 현재 버전에는 아래와 같은 방식을 사용하는게 맞다는 것을 알게 되었다.
진짜 querydsl 은 툴과 버전과 각종 모든 것에 다 걸쳐서 예민한것 같다... ㅋㅋㅋ
찾다보니 김영한님의 gradle annotationProcessor 방식 설정으로 해결이 되어서 나의 build.gradle의 변화를 남겨본다.
기존에 쓰던 com.ewerk.gradle.plugins.querydsl 플러그인 관련부를 다 주석처리해버리고 가운데 디펜던시를 추가했다.
plugins {
id 'java'
id 'org.springframework.boot' version '2.7.7'
id 'io.spring.dependency-management' version '1.0.15.RELEASE'
// id 'com.diffplug.eclipse.apt' version '3.37.2' // 이클립스에서 Mapstruct 사용시
// id 'com.ewerk.gradle.plugins.querydsl' version '1.0.10' // querydsl 플러그인 생성 방식
}
group = 'com.sample'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'
configurations {
compileOnly {
extendsFrom annotationProcessor
}
// querydsl.extendsFrom compileClasspath // querydsl 플러그인 생성 방식
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-security'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:2.3.0'
implementation 'com.github.ulisesbocchio:jasypt-spring-boot-starter:3.0.4'
implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.8.1'
// implementation 'org.projectlombok:lombok'
implementation 'org.mapstruct:mapstruct:1.5.3.Final'
implementation 'com.querydsl:querydsl-jpa:5.0.0'
// implementation 'com.querydsl:querydsl-apt:5.0.0'
// 추가 ↓
annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jpa"
annotationProcessor "jakarta.annotation:jakarta.annotation-api"
annotationProcessor "jakarta.persistence:jakarta.persistence-api"
// ↑
runtimeOnly 'com.oracle.database.jdbc:ojdbc8'
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
annotationProcessor 'org.mapstruct:mapstruct-processor:1.5.3.Final'
annotationProcessor 'org.projectlombok:lombok-mapstruct-binding:0.2.0'
developmentOnly 'org.springframework.boot:spring-boot-devtools'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
test {
useJUnitPlatform()
}
def generatedDir = "src/main/generated"
// querydsl 플러그인 생성 방식
//querydsl {
// library = "com.querydsl:querydsl-apt"
// jpa = true
// querydslDefault = true
// querydslSourcesDir = generatedDir
//}
//
//sourceSets {
// main {
// java {
// srcDirs = ['src/main/java', generatedDir]
// }
// }
//}
//
//compileQuerydsl {
// options.annotationProcessorPath = configurations.querydsl
//}
clean {
delete file(generatedDir)
}
다시 gradle refresh하고 clean하고 build 해놓고
프로젝트 build 를 계속 해봤는데 빌드오류가 사라진 것을 확인하였다.
오히려 이클립스(sts)에서 querydsl 관련 오류가 더 안나는듯??? (갸우뚱)
이클립스와 intellJ의 gradle 버전 적용 방식차이로 이런 문제가 발생한 다는 것을 알게 됨...
[SpringBoot] QueryDSL Q클래스 생성하기 : 플러그인 방식 (feat.STS)
참고링크
'Java > JPA, QueryDSL' 카테고리의 다른 글
[QueryDSL] Q클래스, cannot find symbol error (feat.intelliJ) (0) | 2023.05.15 |
---|---|
[JPA] 복합키 연관관계 맵핑하기 (feat.@Embeddable) (0) | 2023.02.23 |
[QueryDSL] Q클래스 생성하기 : annotationProcessor 방식 (feat.intelliJ) (0) | 2023.02.02 |
[QueryDSL] Q클래스 생성하기 : 플러그인 방식(feat.STS/eclipse) (0) | 2022.12.29 |
[JPA] Entity Table 명 대소문자 (feat.postgresql) (0) | 2022.12.29 |