SpringBoot 2.7 queryDsl 설정 방법.(java src에 java파일 안생기도록)

탄력이·2023년 6월 5일
0

JPA 프로젝트 여정

목록 보기
1/1
post-thumbnail

SpringBoot 2.7 queryDsl 설정 방법.

나는 김영한 강사님의 queryDsl 강의를 듣고있다.
강의 내용의 springBoot의 버전은 2.6일 것이다.
springBoot 2.7 이상에서는 강의 내용대로는 queryDsl 설정이 안된다는 것을 알 수 있다.

Unable to load class 'com.mysema.codegen.model.Type'.

김영한 강사님의 queryDsl 강의 내용과 같이 설정했다면
Unable to load class 'com.mysema.codegen.model.Type'.
위와 같은 에러가 발생했을 것이다.
정상 작동하는 설정 방법을 아래 적어겠다.

springBoot 2.7이상에서는 어떻게 설정하면 좋을지 알아보자.
(사실 필자는 2.7만 쓰기 때문에 3이상은 아래 설정으로 잘 되는지 모르겠다.)
제 설정 방법을 참고하여 3이상을 설정한 분은 댓글 부탁드립니다.

build.gradle 설정.

참고한 블로그에 있는 build.gradle 설정을 가져와 실행해보고, 직접 실행해보며 내가 쓰는 설정을 만들었다.
참고 블로그의 내용을 굳이 수정하여 아래와 같이 설정을 쓰는 이유를 적어보겠다.

  • 위 말한 Unable to load class 'com.mysema.codegen.model.Type'. 오류가 발생하지 않고 SpringBoot 2.7에서 queryDsl이 정상 작동한다.
  • 강의 내용과 같은 경로에 QEntity 파일이 생성이 된다.
  • src/main/ 하위에 QEntity 파일이 생성되지 않고,
    이미 git ignore 설정이 되어있는 build/ 경로 하위에만 파일이 생성된다. (git ignore를 따로 설정해줘야하는 번거로움이 없다.)
plugins {
	id 'java'
	id 'org.springframework.boot' version '2.7.12'
	id 'io.spring.dependency-management' version '1.0.15.RELEASE'

}

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'

	// 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) 대응 코드

	runtimeOnly 'com.h2database:h2'
	annotationProcessor 'org.projectlombok:lombok'
	testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

tasks.named('test') {
	useJUnitPlatform()
}

//querydsl 추가 시작
def querydslDir = "$buildDir/generated/querydsl"

// java source set 에 querydsl QClass 위치 추가
sourceSets {
	main.java.srcDirs += [ querydslDir ]
}

// gradle clean 시에 QClass 디렉토리 삭제
clean {
	delete file(querydslDir)
}
//querydsl 추가 끝

이만 글 줄인다. 해당 설정으로 되는 사람, 안되는 사람 모두 댓글 부탁드려요.

profile
결국 해내고야 마는 개발자

0개의 댓글