인프런 커뮤니티 질문&답변

궁금이님의 프로필 이미지
궁금이

작성한 질문수

실전! Querydsl

Querydsl 설정과 검증

[질문 X] 스프링 부트 3.2 QueryDSL gradle 설정

해결된 질문

작성

·

2.3K

2

[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)

[질문 내용]

plugins {
......
    // QueryDSL 관련 명령어
	id "com.ewerk.gradle.plugins.querydsl" version "1.0.10"
}

dependencies {
........
	//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"
}

//QueryDSL 설정
//def generated = 'src/main/generated'
def generated = layout.buildDirectory.dir("generated/querydsl").get().asFile

querydsl {
	jpa = true
	querydslSourcesDir = generated
}
sourceSets {
	main.java.srcDir generated
}

compileQuerydsl{
	options.annotationProcessorPath = configurations.querydsl
}

configurations {
	compileOnly {
		extendsFrom annotationProcessor
	}
	querydsl.extendsFrom compileClasspath
}

 

//def generated = 'src/main/generated'

def generated = layout.buildDirectory.dir("generated/querydsl").get().asFile

 

이 둘의 차이는 src 폴더 안에 구현체인 Q 파일들을 넣느냐, 아니면 빌드 폴더에 넣느냐인데,

 

만약 이 gradle을 쓰면서 영상처럼 compileQuerydsl 하고 시작하면

java: Attempt to recreate a file for type study.querydsl.entity.QTestEntity

 

이런 오류가 날 수 있음.

그러니까, Test를 시작할 때 빌드 하면서 시작하는데, 아마도 build에 compileJava가, compileJava에 compileQuerydsl이 포함되어 있음.

 

그래서 이미 compileQuerydsl로 QueryDSL 파일들을 빌드 한 상태에서 시작을 하려니,

저 파일을 다시 생성하려고 시도한다는 오류가 뜨는 걸로 추측됨.

 

근데 또 신기한게 뭔가 기록? 캐시가 남는지, QueryDSL 파일을 import 안한 상태로 뻘건줄 쭉쭉 있는 상태로 테스트 돌려서 자동으로 빌드가 따라오게끔 하면 저런 오류가 안뜸.

근데 이런 아무리 알고 있는 에러이지만 저런 환경에서 코드를 짠다는 건 좀..

저는 그래서 그냥

일단

def generated = 'src/main/generated'

여기에 Q파일을 일단 뒀다가, gitignore에 저거 등록 하고,

build 할 때만

def generated = layout.buildDirectory.dir("generated/querydsl").get().asFile

이걸로 바꿔놓는 걸 추천..

 

저는 그렇게 했고 더 좋은 방법도 있을거임..

답변 1

0

spring kotlin으로 작업중이라 문법은 조금 다르지만, dependsOn 추가 하니깐 에러가 안 나는 것 같아요.
tasks.withType<QuerydslCompile> { dependsOn(tasks.compileKotlin) options.annotationProcessorPath = configurations.querydsl.get() }

궁금이님의 프로필 이미지
궁금이

작성한 질문수

질문하기