Eclipse IAM 사용할 때 무한 빌드 해결
우리 팀에서 사용 중인 Eclipse IAM에서 가끔 무한하게 빌드를 반복하거나 무한하지는 않더라도 의미없이 빌드를 몇번 반복하는 사례가 있어서 원인을 좀 찾아보았습니다.
- Eclipse IAM은 Maven Incremental Builder를 프로젝트에 추가합니다.
- Incremental Builder는 내부에서 ResourceBuilderDelegate와 MavenJdtBuilderDelegate 두가지 빌드를 실행합니다.
- 자바 컴파일은 이클립스 컴파일 결과를 그대로 사용할 줄 알았는데 MavenJdtBuilderDelegate가 따로 있었네요.
- ResourceBuilderDelegate는 mvn resources:resources와 resources:testResources를 실행해줍니다.
- 문제 원인은 리소스 변경이 있을 때마다 매번 full build가 트리거되는 것이었습니다. 원래는 그러면 안되는 것입니다만..
- 리소스 변경 후 Refresh를 하면 full build가 트리거
- full build로 인해 Eclipse Builder clean 작업에서 derived resource를 지움
- Java Builder, Maven Incremental Builder가 순서대로 실행
- Maven Incremental Builder의 resources:resources goal 실행
- resources goal로 인해 리소스 변경 후 다시 내부적으로 refresh 실행
- 다시 full build 트리거…
Maven 문제는 둘째치고, resource 변경 만으로 Full Build가 실행되면 규모가 큰 프로젝트에서 빌드가 빨라지는 Incremental Build의 장점을 얻을 수 없습니다. 임시 조처는 다음과 같습니다.
- Main Menu > Preferences
- Java > Compiler > Building > Output folder > Scrub output folders when cleaning projects 체크 끄기
완전한 해결책은 아니고 workaround이긴 하지만 이것으로 Full Build를 실행하더라도 기존 derived resources를 지우지 않기 때문에 무한반복이 발생하지 않습니다. 다만 clean…으로 full build를 명시적으로 실행하더라도 완전히 깨끗한 빌드는 아니게 되는데요. 완전히 새로 빌드하시려면 Clean… 대신 maven clean을 사용하실 수 있습니다.
refresh만 건드려도 full build가 일어나는 원인을 아시는 분은 알려주세요~ 꼭 IAM 문제라고 할 수는 없고.. 소스 좀 더 까봐야겠네요..


