프로젝트/CICD

[트러블슈팅][QueryDSL/CI/CD] Attempt to recreate a file for type QClass 해결

SY 키키 2024. 6. 19. 14:45

프로젝트를 배포하며 자꾸 아래와 같은 에러가 발생하였습니다.

+ chmod +x gradlew
+ ./gradlew clean bootJar
Starting a Gradle Daemon (subsequent builds will be faster)
> Task :cleanQuerydslSourcesDir
> Task :clean UP-TO-DATE
> Task :initQuerydslSourcesDir
> Task :compileQuerydsl

> Task :compileJava
Attempt to recreate a file for type com.restgram.global.entity.QBaseEntity
error: Attempt to recreate a file for type com.restgram.global.entity.QBaseEntity

 

 

이 문제는 Qclass가 있는 상태에서 또 Qclass 를 생성하려고 할 때 발생하는 에러입니다.

 

문제 해결 방법은 여러가지 입니다.

1️⃣ 가장 유명한 방식은 clean을 통해 삭제한 후, 다시 실행하는 것입니다.

위와 같이 Gradle > Tasks > build > clean 을 통해 생성해둔 QClass를 삭제한 후 다시 실행하면 됩니다.

 

하지만 이 방식은 젠킨스를 통해 배포해야 하는 저에게 도움이 되지 않았습니다. 왜냐하면 애초에 ./gradlew clean bootJar 이라는 명령어를 통해 clean 한 후 실행했을 때 발생했기 때문이죠.

 

그렇기 때문에 저는 원인을 확인하였습니다.

 

2️⃣ compileQuerydsl 건너뛰기

Qclass 를 생성하는 것은 compileQuerydsl 에서 1번, compileJava 과정에서 1번. 이렇게 총 2번 생성하게 됩니다. 따라서 이미 compileQuerydsl에서 생성된 Qclass를 compileJava에서 또 생성하려고 했기 때문에 발생한 문제죠.

(compileJava에는 compileQuerydsl 과정이 포함되어 있습니다.)

 

따라서 저는 compileQuerydsl 과정을 건너 뛰어 compileJava 과정에서 Qclass를 생성하도록 함으로써 이 문제를 해결하였습니다. 

tasks.named('compileQuerydsl').configure {
    enabled = false
}