본문으로 바로가기

JPA QueryDSL이나 객체 매핑 라이브러리인 mapstruct 활용을 하면 src/main/generated 폴더내에 class 파일이 생성된다.

코드를 수정하면 이 폴더내에 class 파일도 다시 초기화되어야 한다.

build.gradle 파일에 초기화후 재생성하는 cycle을 추가한다.

def generated='src/main/generated'

sourceSets {
    main.java.srcDirs += [ generated ]
}

tasks.withType(JavaCompile) { // compile시
    options.annotationProcessorGeneratedSourcesDirectory = file(generated)
}

clean.doLast { // clean시 폴더 삭제
    file(generated).deleteDir()
}

설정을 완료하고 서버 실행을 시도했지만, 수정된 class파일로 적용되지 못하고 에러를 발생시켰다.

이전에 JPA 토이프로젝트 진행할때도 같은 문제가 발생해서 삽질했던 추억이 떠올랐다.

생각을 거슬러 올라가서 터미널로 서버를 실행하니 문제없이 잘 동작되었다. 뭐지??

 

약간 뇌피셜이지만 인텔리제이 설정에 위와 같이 설정되있는게 문제였던 것 같다. 서버 실행을 할때 gradle로 설정했을 때보다 더 빨리 실행된다고 알고있어서 저렇게 설정했었는데.. 저거 때문에 build.gradle내 cycle이 실행되지 않아 제대로 초기화 작업이 안된것같다. 그래서 터미널에서는 gradle 명령어로 실행하니 제대로 잘 동작했던거군!

 

gradle로 설정하고 다시 실행해보니 아주 잘되는걸 확인되었다.. 삽질과정에서 꽤나 고통받았지만 이전부터 아주 골치아픈 문제였는데 해결되서 참 다행