Notice
Recent Posts
Recent Comments
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

DeFacto-Standard IT

[IntelliJ IDEA] Lombok 적용이 안될 때 본문

DEV tools/IDEA

[IntelliJ IDEA] Lombok 적용이 안될 때

defacto standard 2018. 5. 13. 23:27


얼마 전 Eclipse를 쓰다가 학생 용 라이센스로 IntelliJ 1년치를 쓰게 되었다.


Eclipse에서도 소스 제너레이트 기능도 있고 Lombok 사용도 가능했지만, 왠지 lombok.jar를 특정 경로에 넣고 재시작 해야만 사용 가능한 버그가 있었다. 너무 불편했다.


IntelliJ IDEA에서도 이를 사용해보려고 했는데, 뭔가 해결이 되지 않았다.



기본적으로 시도한 사항은 다음과 같다.


1. Enable Annotation Processing

2. Lombok Plugin 설치 후 재시작

3. 자바 프로젝트를 Maven 프로젝트로 변환 후, Lombok Dependency 추가


결론적으로 위 사항을 모두 해봐도 해결이 안됐지만, 드디어 해결 방법을 찾아서 기록용으로 남겨둔다.



에러 메시지는 다음과 같다.

Error:(26, 11) java: The method setCommand(behavioral.command.command.Command) is undefined for the type behavioral.command.invoker.Invoker


Invoker라는 클래스는 내가 정의한 클래스이다. 해당 클래스에 있는 setCommand() 메서드를 찾을 수 없다는 것이다.
즉, 이 에러는 Invoker.setCommand()를 사용하는 클라이언트 클래스에서 나는 오류이다.

setter가 있어야 하는 클래스(Invoker) 내부에서는 Setter가 인식이 되는데 (this.set  까지 작성하면 setter 메서드에 대한 suggestion이 뜸)
이를 사용하는 클라이언트에서는 모르겠다는 것이다.



문제는, 소스코드 상에서 명백히 Compile Error가 나는 부분은 IDE에서 빨간 줄로 그어주는데, 이번 상황에서는 그렇지 않다는 것이다.

심지어 Client에서도 invoker.set  까지 작성하면 setCommand() 메서드에 대한 suggestion이 뜨는 상황이었다.

컴파일에는 아무런 문제가 되지 않는다는 말이다.  그런데 lombok이 적용이 안되어서 메서드를 찾을 수 없다는 것이다.





결론적으로, 컴파일러의 문제였다.


IntelliJ에서는 여러 버전의 컴파일러를 지정할 수 있다.


File -> Settings -> Build, Execution, Deployment -> Compiler -> Java Compiler에서


Use Compiler가 Eclipse로 되어있었는데, 이를 javac로 변경하면 된다.


참고 : http://debop.blogspot.kr/2013/07/intellij-12-lombok-project-plugin.html



* Eclipse Compiler 사용 시

Compilier를 Eclipse로 한다면, 다음 링크를 참조하도록 한다. 나는 그냥 javac를 쓰겠다.

https://stackoverflow.com/questions/24006937/lombok-annotations-do-not-compile-under-intellij-idea/30125507#30125507



Comments