====== Lombok Field 지정이 올바른지 검사 ======
최신 Lombok 은 annotation 으로 include/execlude 를 지정할 수 있으므로 더이살 아래 내용은 필요가 없다.
''@EqualsAndHashCode(of = {})'' 혹은 ''@ToString(of = {})'' 등에서 대상 필드를 명시적으로 지정할 때 문자열로 지정하기 때문에 오타를 내거나 리팩토링시에 변경 사항이 올바로 반영 안되는 상태가 될 수 있다.
이 때 Lombok은 컴파일시 컴파일러 Warning을 내주긴 하지만, 이를 못보고 지나칠 수 있다.
이를 확실히 하려면 Build 시점에 그런 상황이 있을 때 일부러 에러를 내줘야 한다.
[[ci:jenkins|Jenkins]] 로 빌드할 때 [[https://wiki.jenkins.io/display/JENKINS/Log+Parser+Plugin|Log Parser Plugin]]으로 같은 효과를 낼 수 있다.
===== rule 파일 생성 =====
프로젝트에 ''lombok_field_check.rule'' 이라는 파일을 아래 내용으로 만들고서
# 필드명 잘못 기입했을 때
error /warning: This field does not exist/
# callSuper 안했을 때
error /warning: Generating equals\/hashCode implementation but without a call to superclass/
Lombok이 포함된 Java 프로젝트를 빌드하는 Jenkins Job에 log parser plugin을 설정하면서 해당 rule을 지정해 준다.
===== 빌드 후 조치로 Log Parser Plugin 추가 =====
Build Job에서 빌드 후 조치로 Log Parser Plugin을 추가한다.
이 때 Error, Warning에 대해서 빌드를 실패하게 설정한다.
{{:java:lombok:log_parser_plugin_config.png|}}
===== 오류가 있는 소스로 빌드를 해보면 =====
@EqualsAndHashCode(of = { "ie" }) // ie는 id의 오타
@ToString(of = { "firstName", "lastName", "birthdate" }) // birthdate는 birthday의 오타
public class User {
private Long id;
private String firstName;
private String lastName;
private LocalDateTime birthday;
}
빌드가 실패하고, **Parsed Console Output** 항목을 살펴보면 어디서 어떻게 실패했는지를 확인할 수 있다.
{{:java:lombok:parsed_console_output_final.png|}}
===== 주의 =====
Job을 Slave에서 실행할 경우 stderr 로 출력되는 컴파일 오류가 log로 남지 않는 현상이 발생했음.