티스토리 뷰
사내에 querydsl 설정을 아주 잘 하는 동료가 있다면 문제가 없겠지만,
저와 같이 홀로 분투하시는 분들을 위해 저도 지금까지 이 방법 저 방법 해오다가
깔끔하게 해결된 상태를 공유하고자 합니다.
저도 Q클래스 생성하는 법을 여러 설정법으로 올렸었고,
마주하던 여러 오류상황들을 조치했던 글을 서너개 포스팅 했는데...
지속적으로 불편한 상황들이 계속 발생 되었고, 주변 동료들에게도 빈번하게 발생하여
이 상황을 문제없게 해결하고자 QueryDSL 설정을 다시 건드려보게 되었습니다.
초반에는 설정에 대한 이해가 부족한 상태였던 것 같고
지속적으로 이 부분을 마주하다 보니 깨달음이 온 것 같네요.
이번 포스트는 인텔리제이에서의 방법입니다.
이클립스나 STS 를 사용하시는 분들은 아래 포스트로 진행하시면 아무 문제가 없습니다.
설정을 다시 하게 된 시발점은 이전에 포스팅했던 Q클래스 import 가 안되는 현상 때문이었습니다.
인텔리제이를 재기동하면 generated 폴더가 계속 안잡혀 있어 매우 번거로웠습니다.
그래서 제가 이전에 올렸던 설정법들을 다시 보니 이유를 알 것 같았습니다.
팀원 중 일부가 이클립스를 쓰는 사람도 있어서 gradle 설정을 이클립스 쪽에 맞춰서 쓰고 있던 것이 문제였습니다.
인텔리제이 Gradle 빌드를 쓰면 알아서 build 폴더에 생성되고 모듈이 연결되는데
이클립스 방식을 쓰다보니 직접 지정한 generated 위치에 Q클래스가 생성되었고
이것이 인텔리제이 프로젝트 모듈에 자동으로 연결되지 않아서 생기는 문제였습니다.
그래서 gradle 설정을 아래와 같이 조정했습니다.
plugins {
id 'java'
id 'org.springframework.boot' version '2.7.7'
id 'io.spring.dependency-management' version '1.0.15.RELEASE'
}
group = 'com.sample'
version = '0.0.1'
sourceCompatibility = '1.8'
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-security'
implementation 'org.springframework.boot:spring-boot-starter-data-redis'
implementation 'org.springframework.session:spring-session-data-redis'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-mail'
implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:2.3.0'
implementation 'com.github.ulisesbocchio:jasypt-spring-boot-starter:3.0.5'
implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.8.1'
implementation 'nz.net.ultraq.thymeleaf:thymeleaf-layout-dialect:3.2.0'
// 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:5.0.0: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()
}
sourceSets {
main {
java {
srcDirs = ['src/main/java']
}
// Mybatis 쿼리 xml 위치때문에 조정
resources{
srcDir "${project.projectDir}/src/main/java"
}
}
}
jar {
enabled = false
}
//clean {
// delete file(generatedDir)
//}
// def generatedDir = "src/main/generated"
이제 gradle 갱신 후에 빌드 하면
build 폴더 안에 Q클래스가 생성되고 프로젝트 모듈이 알아서 잘 연결하게 된다.
(과거 포스팅 때 발생했던 Q클래스심볼오류, 빌드오류는 자연스레 해결되고 generated 폴더 연결 안되는 문제까지 모두 해결됐습니다. )
저는 빌드방식을 Gradle 로 사용합니다.
개발자 환경에 따라서 QueryDSL 설정방법이 천차 만별입니다. 솔직히...
제가 설정한 방법이 어떤 분에게는 안될 수도 있고 쫌 다르게 동작할 수도 있습니다.
저는 위와 같이 설정 함으로써 queryDSL 에서 발생하는 모든 문제가 해결되어
더 이상의 골머리는 썩지 않을 것 같습니다.
'Java > JPA, QueryDSL' 카테고리의 다른 글
[JPA] LocalContainerEntityManagerFactoryBean의 setJpaPropertyMap을 설정할 때 사용할 수 있는 key 값 목록 (0) | 2023.10.24 |
---|---|
[Entity] @PrePersist , @PreUpdate 차이 (0) | 2023.09.18 |
[QueryDSL] Q클래스 import 불가 오류해결 / generated 폴더관련 문제. (feat.IntelliJ) (0) | 2023.07.28 |
[QueryDSL] Q클래스, cannot find symbol error (feat.intelliJ) (0) | 2023.05.15 |
[JPA] 복합키 연관관계 맵핑하기 (feat.@Embeddable) (0) | 2023.02.23 |