본문 바로가기

SPRING

하루종일 화가났던 Querydsl gradle 설정 오류에 대하여..

JPA 공부를 하던 중 동적 쿼리를 처리하기 위해 Querydsl 을 사용 해보려 했다. 가장 먼저 gradle 설정을 하고 comopileJava를 실행하여 QBaseEntity와 QBoard가 생성되는지 확인하려 했다.

그런데 안된다.

책을 보고 공부하던 중이라 책에 적힌대로 build.gradle을 작성했었다.


buildscript{
    ext {
        queryDslVersion = "5.0.0"
    }
}

plugins {
    id 'java'
    id 'org.springframework.boot' version '3.3.1'
    id 'io.spring.dependency-management' version '1.1.5'
}

group = 'org.zerock'
version = '0.0.1-SNAPSHOT'

java {
    toolchain {
        languageVersion = JavaLanguageVersion.of(17)
    }
}

configurations {
    compileOnly {
        extendsFrom annotationProcessor
    }
}

repositories {
    mavenCentral()
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    compileOnly 'org.projectlombok:lombok'
    developmentOnly 'org.springframework.boot:spring-boot-devtools'
    runtimeOnly 'org.mariadb.jdbc:mariadb-java-client'
    annotationProcessor 'org.projectlombok:lombok'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    testRuntimeOnly 'org.junit.platform:junit-platform-launcher'

//  테스트시 lombok 사용을 위한 라이브러리 설정
    testCompileOnly 'org.projectlombok:lombok'
    testAnnotationProcessor 'org.projectlombok:lombok'

//    thymeleaf 레이아웃을 위한 라이브러리
    implementation group: 'nz.net.ultraq.thymeleaf', name: 'thymeleaf-layout-dialect', version: '3.1.0'

    implementation "com.querydsl:querydsl-jpa:${queryDslVersion}"

    annotationProcessor(
            "javax.persistence:javax.persistence-api",
            "javax.annotation:javax.annotation-api",
            "com.querydsl:querydsl-apt:${queryDslVersion}:jpa"
    )

}

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

sourceSets{
    main{
        java{
            srcDirs = ["$projectDir/src/main/java", "$projectDir/build/generated"]
        }
    }
}

추가된 부분은 buildScript{} / dependencies / sourceSets 밖에 없었고 내용도 너무 간단해서 도대체 무슨 오류인지 감도 안 잡혔다.

Execution failed for task ':compileJava'.
Could not resolve all files for configuration ':compileClasspath'.
Could not find javax.persistence:javax.persistence-api:.
Required by:
project :
Could not find javax.annotation:javax.annotation-api:.
Required by:
project :
Could not find com.querydsl:querydsl-jpa:${queryDslVersion}.
Required by:
project :

로그를 보니 위 처럼 나왔는데


compileClasspath를 구성하기 위한 파일들을 해결할수 없다.
persistence-api를 찾을 수 없다.
annotation-api를 찾을 수 없다.
querydsl-jpa:5.0.0을 찾을 수 없다.


아예 내가 추가한 부분을 찾을수 없어 구성 조차 못하는 것이었다...


오타도 없고 전혀 감을 못잡아서 검색을 해보았다. 검색 결과 버전을 명시하거나, 아예 다르게 작성해야 한다고 하길래 반신반의 하면서 따라 해봤는데 역시나 안된다.


정말 하루종일 고민하고 방법을 찾아보다 갑자기 javax 가 눈에 들어왔다.

javax.persistence, javax.annotation....

이 순간 뭔지 모를 확신이 들었다. 스프링부트 버전의 문제가 아닐까!!!!!

스프링을 사용할때에도 버전에 따라 javax 패키지가 jakarta로 변경되어 헤맸던 적이 있었는데 이것도 분명 그럴거 같아서 확인 해보니 스프링부트 3 이후로 jakarta로 패키지가 바뀐것을 확인했다.


build.gradle의


plugins{
    id 'org.springframework.boot' version '2.6.4'
}

스프링부트의 버전을 2.6.4로 변경하고 clean후 compileJava를 실행하니 QBaseEntity와 QBoard가 생성되었다.


뿌듯함과 동시에 나의 멍청함에 허무했다...... 그래도 오늘 일로 적어도 이런 문제는 더 이상 생기지 않을것 같아서 해결했다는 뿌듯함을 더 크게 가져가기로 했다ㅎ

'SPRING' 카테고리의 다른 글

(spring)Assert Class  (0) 2024.07.14
(Junit5)Assertions Class  (1) 2024.07.08
(Junit4)Assert Class  (0) 2024.07.08
(Java)assert  (0) 2024.07.04
의존성 주입 1  (0) 2024.04.29