build.gradle 설정 문제 : querydsl,java21,lombok,mapstruct
해당 스펙의 gradle설정 해보신분 이 계신다면 답변달아주시면 너무 감사하겠습니다ㅠㅠㅠ 가상스레드를 사용할예정이라 java 21,querydsl,lombok을 포함하여 개발을 시작했습니다 (이후 mapstruct를 추가함) 처음설정은 어찌저찌 일일이 지정해가면서 빌드할때 compileQuerydls 태스크만 돌린다던지 querydsl관련 설정을 덕지덕지 붙여서 어떻게 생성시키고 돌아가게는 만들었던것 같습니다.하지만 기존 설정이 mapstruct를 붙이게 되면서 문제가 생겼고 (anotationprocessor문제로 추정)java21에서는 querydsl의 directory path 설정이라던지 기타 설정없이도 qclass가 생긴다하여 build.gradle 파일을 수정하며 삽질중인데 잘 해결되지 않아 질문글을 남기게 되었습니다. 제가 생각하기로는 lombok과querydsl,mapstruct의 anotationprocessor가 호환이 안되던지분리해주어야 하거나 추가 설정이 필요해서 되지 않는 것인가 추측해보았습니다. 일단 기존 querydsl, lombok만 설정했던 소스와 현재 수정중인 소스를 첨부합니다[기존파일] querydsl,lombok 설정plugins {
id 'java'
id 'org.springframework.boot' version '3.3.5'
id 'io.spring.dependency-management' version '1.1.6'
id 'com.ewerk.gradle.plugins.querydsl' version '1.0.10'
}
apply plugin: 'com.ewerk.gradle.plugins.querydsl'
group = 'kr.co.aaa'
version = '0.0.1-SNAPSHOT'
java {
toolchain {
languageVersion = JavaLanguageVersion.of(21)
}
}
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
repositories {
mavenCentral()
}
dependencies {
// Validation 관련 추가 의존성
implementation 'jakarta.validation:jakarta.validation-api:3.0.2'
implementation 'org.hibernate.validator:hibernate-validator:8.0.1.Final'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-quartz'
implementation 'org.springframework.boot:spring-boot-starter-web'
compileOnly 'org.projectlombok:lombok'
developmentOnly 'org.springframework.boot:spring-boot-devtools'
runtimeOnly 'org.postgresql:postgresql'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
// QueryDSL 추가
implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta' // QueryDSL JPA 의존성
implementation 'com.querydsl:querydsl-core'
implementation 'com.querydsl:querydsl-collections'
annotationProcessor 'com.querydsl:querydsl-apt:5.0.0:jakarta' // 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) 대응 코드
//netty
implementation 'io.netty:netty-all:4.1.97.Final' // Netty 전체 라이브러리
}
// Querydsl 설정부
def generated = file('src/main/generated') // src/main/generated 경로 지정
querydsl {
library = 'com.querydsl:querydsl-apt'
jpa = true
querydslSourcesDir = generated
}
sourceSets {
main {
java {
srcDirs += "src/main/generated" // generated 폴더를 소스 경로에 추가
}
}
}
tasks.withType(JavaCompile).configureEach {
options.annotationProcessorPath = configurations.annotationProcessor
options.generatedSourceOutputDirectory.set(generated) // Q 클래스가 src/main/generated에 생성되도록 설정
}
// compileQuerydsl 태스크가 이미 존재하는지 확인하고, 없을 경우에만 등록
if (!tasks.names.contains("compileQuerydsl")) {
tasks.register("compileQuerydsl", JavaCompile) {
source = sourceSets.main.java.srcDirs
classpath = sourceSets.main.compileClasspath // Main classpath 설정
options.annotationProcessorPath = configurations.annotationProcessor
destinationDirectory.set(generated) // 생성 경로 설정
}
}
compileQuerydsl {
options.annotationProcessorPath = configurations.querydsl
}
configurations {
querydsl.extendsFrom compileClasspath
}
// gradle clean 시에 QClass 디렉토리 삭제
clean {
delete file("src/main/generated")
}
tasks.named('test') {
useJUnitPlatform()
} [수정중인 파일] querydsl,lombok,mapstruct이 되도록 빌드하고자 했었음plugins {
id 'java'
id 'org.springframework.boot' version '3.3.5'
id 'io.spring.dependency-management' version '1.1.6'
}
group = 'kr.co.artlab'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '21'
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-quartz'
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.9.0'
implementation 'jakarta.validation:jakarta.validation-api:3.0.2'
implementation 'org.hibernate.validator:hibernate-validator:8.0.1.Final'
implementation 'org.mapstruct:mapstruct:1.5.5.Final'
implementation 'io.netty:netty-all:4.1.97.Final'
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
annotationProcessor 'com.querydsl:querydsl-apt:5.0.0:jakarta'
annotationProcessor 'jakarta.annotation:jakarta.annotation-api'
annotationProcessor 'jakarta.persistence:jakarta.persistence-api'
annotationProcessor 'org.mapstruct:mapstruct-processor:1.5.5.Final'
runtimeOnly 'org.postgresql:postgresql'
developmentOnly 'org.springframework.boot:spring-boot-devtools'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
// Querydsl
implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta'
}
tasks.named('test') {
useJUnitPlatform()
}
clean {
delete file('src/main/generated')
}