-
Spring boot 2 + Gradle 터미널에서 Build 시 cannot find symbol 오류Gradle 2019. 3. 11. 16:14
Spring boot 와 Gradle을 통해 로컬에서 테스트를 진행 중 build 관련하여 오류가 발생하였다.
개발환경은
1. spring boot 2.1.3
2. gradle
3. lombok 1.18.64. 인텔리제이이고오류 상황은 아래와 같다.
1. 인텔리제이의 GUI gradle 툴을 사용해서 build 버튼을 눌렀을때는 정상적으로 Build 됨
2. 터미널에서 gradle build 명령 시 오류 발생
아래는 오류 로그의 일부다.
error: cannot find symbol
log.info("test log");
^
symbol: variable log
터미널에서만 빌드 시 오류가 발생하는 상황이었고 로그를 보며 원인을 생각해보았다.
오류가 발생하는 시점은 Task :compileJava -> 즉 Compile 시 오류가 발생하였으며 lombok과 관련된 부분에서 모두 오류가 발생하였다.
Lombok과 관련된 오류라 생각하여 열심히 검색해보았지만 대부분 인텔리제이 Lombok 플러그인을 설치하라는 방법과
Build, Execution, Deployment > Compiler > Annotation Processors > Enable annotaion processing 를 체크 활성화하는 방법이었다.
위 방법으로 해도 터미널에서는 gradle build 명령 시 동일한 오류가 발생되었따.
결론적으로는 annotation processing(ap)과 관련된 문제인 것 같다.
그러나 터미널에서 gradle build를 할 경우 위 인텔리제이의 Enable annotaion processing 활성화 방법과 별개로 ap 옵션을 주어야한다.
(Lombok의 어노테이션을 사용할 경우 컴파일 시 어노테이션을 먼저 스캔해서 코드(getter, setter 등)로 변환해주는 선처리가 필요하다.)
Annotation Processing(ap) 란 Compile Time에서 annotation 에 대한 스캔 및 처리를 해주는 것이다.
ap 옵션은 gradle.build 에서 아래와 같이 설정해주면 된다.
위 설정 추가 후 터미널에서도 정상적으로 Build가 되는 것을 확인하였다.
* 참고
1. https://qiita.com/opengl-8080/items/beda51fe4f23750c33e9
2. https://stackoverflow.com/questions/52547965/gradle-build-fails-from-terminal-for-lombok-annotation-in-spring-boot-applicatio