일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 벌크연산
- COPYOFRANGE
- SPOF
- 역정규화
- ExceptionResolver
- optimistic lock
- Java
- 단어변환
- HandlerMethod
- API
- CORS
- propagation
- Generic method
- Transaction
- IllegalStateException
- hoisting
- pessimistic lock
- tracking-modes
- CQS
- NestJS 요청흐름
- cross-cutting concerns
- #@Transacional
- type eraser
- demand paging
- RequestMappingHandlerMapping
- TDZ
- 프로그래머스
- generic type
- wrapper class
- assertJ
- Today
- Total
jingyulog
QueryDSL gradle, maven 설정 (스프링 부트 3.X 이상) 본문
gradle 설정
queryDSL 은 버전별로 설정이 자주바뀐다.
이에 맞춰 필자는 구글링하여 최적의 해를 정리해보았다.
스프링 부트 2.X 버전에서와 3.X 버전에서의 build.gradle 설정 방법은 다르다.
- 스프링 부트 2.X 버전 설정
<1>
plugins {
id 'org.springframework.boot' version '2.2.2.RELEASE'
id 'io.spring.dependency-management' version '1.0.8.RELEASE' //querydsl 추가
id "com.ewerk.gradle.plugins.querydsl" version "1.0.10"
id 'java'
}
group = 'study'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-web'
//querydsl 추가
implementation 'com.querydsl:querydsl-jpa'
compileOnly 'org.projectlombok:lombok'
runtimeOnly 'com.h2database:h2'
annotationProcessor 'org.projectlombok:lombok'
testImplementation('org.springframework.boot:spring-boot-starter-test') {
exclude group: ‘org.junit.vintage’, module: ‘junit-vintage-engine'
}
}
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 추가 끝
<2>
plugins {
id 'org.springframework.boot' version '2.7.4'
id 'io.spring.dependency-management' version '1.0.14.RELEASE'
id 'java'
}
group = 'study'
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'
compileOnly 'org.projectlombok:lombok'
runtimeOnly 'com.h2database:h2'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
// queryDSL 설정
implementation "com.querydsl:querydsl-jpa"
implementation "com.querydsl:querydsl-core"
implementation "com.querydsl:querydsl-collections"
annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jpa" // querydsl JPAAnnotationProcessor 사용 지정
annotationProcessor "jakarta.annotation:jakarta.annotation-api" // java.lang.NoClassDefFoundError (javax.annotation.Generated) 대응 코드
annotationProcessor "jakarta.persistence:jakarta.persistence-api" // java.lang.NoClassDefFoundError (javax.annotation.Entity) 대응 코드
}
tasks.named('test') {
useJUnitPlatform()
}
// Querydsl 설정부
def generated = 'src/main/generated'
// querydsl QClass 파일 생성 위치를 지정
tasks.withType(JavaCompile) {
options.getGeneratedSourceOutputDirectory().set(file(generated))
}
// java source set 에 querydsl QClass 위치 추가
sourceSets {
main.java.srcDirs += [ generated ]
}
// gradle clean 시에 QClass 디렉토리 삭제
clean {
delete file(generated)
}
- 스프링 부트 3.X 버전 이상에서의 설정
plugins {
id 'java'
id 'org.springframework.boot' version '3.0.3'
id 'io.spring.dependency-management' version '1.1.0'
// Querydsl 플러그인 사용 X
// id "com.ewerk.gradle.plugins.querydsl" version "1.0.10"
}
group = 'sample'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '17'
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-web'
compileOnly 'org.projectlombok:lombok'
runtimeOnly 'com.mysql:mysql-connector-j'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
// Spring boot 3.x이상에서 QueryDsl 패키지를 정의하는 방법
implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta'
annotationProcessor "com.querydsl:querydsl-apt:5.0.0:jakarta"
annotationProcessor "jakarta.annotation:jakarta.annotation-api"
annotationProcessor "jakarta.persistence:jakarta.persistence-api"
}
tasks.named('test') {
useJUnitPlatform()
}
// === QueryDsl 빌드 옵션 (선택) ===
def querydslDir = "$buildDir/generated/querydsl"
sourceSets {
main.java.srcDirs += [ querydslDir ]
}
tasks.withType(JavaCompile) {
options.generatedSourceOutputDirectory = file(querydslDir)
}
clean.doLast {
file(querydslDir).deleteDir()
}
- jakarta.annotation-api와 jakarta.persistence-api는 아래와 같은 에러를 방지하기 위해서 추가해준다.
java.lang.NoClassDefFoundError:javax/persistence/Entity
- querydslDir옵션은 Q클래스들을 빌드 폴더 안으로 빌드되게 할 수 있어서 유용하다.
maven 설정
<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-apt</artifactId>
<version>5.0.0</version>
<classifier>jakarta</classifier>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-jpa</artifactId>
<version>5.0.0</version>
<classifier>jakarta</classifier>
</dependency>
<요약>
QueryDSL 은 apt-maven-plugin 을 사용하여 컴파일 과정에서 Q-Type 클래스를 생성한다.
따라서 querydsl-apt jakarta 버전에서는 apt-maven-plugin 이 필요 없다!
<원인>
querydsl-apt jakarta 버전에서는 javax.annotation.processing.Processor 를 서비스로 제공하고 있고, 자바 컴파일러가 이를 사용하여 Q-class 를 target/generated-sources/annotation 에 생성한다.
그러므로 apt-maven-plugin 이 이중 동작해서 에러가 발생한다.
<결과>
만약 pom.xml 에 apt-maven-plugin 설정이 있다면 에러가 발생할 수 있다.
이때 설정한 apt-maven-plugin 을 제거하면 된다.
인용
[Spring] QueryDsl gradle 설정 (Spring boot 3.0 이상)
스프링 부트 3.0이상에서의 Querydsl 설정방법
velog.io
https://ittrue.tistory.com/293
[JPA] QueryDSL build.gradle 환경 설정
스프링 부트 프로젝트 생성 Spring initialzr에서 프로젝트를 생성한다. Spring Web, JPA, H2 Database 등 필요한 의존 라이브러리 설정이 필요하다. Spring Boot 2.6 ~ 2.7과 3.0은 build.gradle 설정 방법이 다르다. Que
ittrue.tistory.com
https://coding-log.tistory.com/244
[Spring boot] JPA QueryDSL 환경 설정, 연동하기 (Maven, Gradle ver)
JPA에서 동적쿼리를 사용하기 위해 QueryDSL을 사용해야 하는데 이걸 쓰려면 외부에서 라이브러리를 가져와야 하기 때문에 세팅이 필요하다. Maven version pom.xml //의존성 부분 com.querydsl querydsl-apt provi
coding-log.tistory.com
https://post.dooray.io/we-dooray/tech-insight-ko/back-end/4173/
스프링 부트 3.0 으로 전환 - Dooray! POST
2022년 11월에 기존의 Spring framework 5 와 Spring Boot 2.X 버전을 대체하는 Spring framework 6와 Spring Boot 3 가 릴리즈되었습니다. 어떤 변화가 있고, 어떻게 설정해야 할지 알아봅니다
post.dooray.io
'Tech > JPA' 카테고리의 다른 글
지연로딩 vs 즉시로딩 (0) | 2023.04.27 |
---|---|
QueryDsl 사용 및 도출되는 쿼리문 예제 (0) | 2023.04.20 |
쿼리 메서드 Sample 및 JPQL snippet (0) | 2023.04.14 |
QueryDSL 라이브러리 (0) | 2023.04.12 |
JPA Lock (0) | 2023.04.11 |