QueryDsl SpringBoot 2.7의 gradle 설정을 공유합니다.
11505
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가지 있으니 주의하시기 바랍니다.
Querydsl Q파일 생성 위치가 다릅니다. 기존 영한님 강의대로 $build 로 시작하는 설정을 사용하면 테스트 실행 시 Q파일의 위치를 찾지 못해서 테스트가 실패합니다.
Gradle -> Tasks -> build -> clean
Gradle -> Tasks -> build -> build 혹은 classes
기존 영한님 교안에는 빌드 시 Gradle -> Tasks -> other -> compileQuerydsl 로 Q파일을 생성하지만, 이 방법의 경우 other에 해당 메뉴가 없습니다. 그래서 빌드 시에는 그냥 build 메뉴의 build 혹은 classes 로 빌드하시면 Q파일이 생깁니다.
영한님 강의에서는 gradle build 폴더가 대부분 git 버전관리에 포함되지 않으므로 따로 설정할 필요가 없지만, 이 경우 Q파일이 소스폴더에 들어가므로 .gitignore 에 아래와 같이 별도로 경로를 설정해 주어야 합니다.
### Querydsl /src/main/generated
혹시 저같이 청개구리마냥 강의에 나온 버전 사용 안 하고 최신 버전 사용하시는 분들께 도움이 되었으면 좋겠습니다. 저도 타사 강의에서 가져온 것이고 기초 테스트만 통과한 것이라서 혹시 강의에 맞지 않는 경우 영한님이나 다른 분들이 추가 정보를 주시면 좋을 것 같습니다.
여담인데 QueryDSL은 쿼리 짜긴 확실히 편한데 설정이 버전마다 중구난방이라 불편합니다. 똑똑한 개발자분들이 이런 설정도 그냥 @Configuration 으로 빼버리는 거 만들어주지 않을까 하는 기대가 있긴 합니다.
답변 5
0
/src/main/generated 에 Q 파일은 생성되었는데 아래와 같이 NullPointException을 발생시키는데 원인을 아시는 분 있으시나요?java.lang.NullPointerException
at com.querydsl.jpa.impl.JPAProvider.getTemplates(JPAProvider.java:88)
at com.querydsl.jpa.impl.JPAQuery.<init>(JPAQuery.java:48)
at com.springboot.jpa.QueryDSLTest.queryDslTest(QueryDSLTest.java:18)
요기서 위와 같은 에러가 납니다.
public class QueryDSLTest {
@PersistenceContext
EntityManager entityManager;
@Test
public void queryDslTest() {
JPAQuery<Product> query = new JPAQuery<>(entityManager);
...
}
정처기2회실기를 마치고.
0
31
0
방산 SW 개발자가 되기 위한 조언을 부탁드립니다!
1
118
1
JAVA로 백엔드 프로젝트
0
87
1
26년1회 실기 합격할수 있을까??ㅠㅠ
0
184
1
자바 실무 단계
0
319
2
진로가 큰 걱정입니다...
0
308
1
MVC 패턴을 정확히 익힐려면 어떻게 해야할까요?
0
361
1
공부 방향
0
322
1
선생님 조언 부탁드립니다.
0
290
0
안녕하세요! 실무와 관련되서 질문드립니다!
0
341
1
함수형 인터페이스 활용
0
362
1
WebFlux를 실무에 적용하기 전에 고민이 있습니다.
0
311
0





