[java] 롬복은 어떻게 작동합니까?

나는 오늘 롬복을 만났다 .
그것이 어떻게 작동하는지 알고 싶어합니다.
Java Geek Article 은 몇 가지 단서를 제공하지만 완전히 명확하지는 않습니다.

Java 6은 apt를 제거하고 javac가 주석을 관리 할 수있게하여 프로세스를 간소화하여보다 간단한 단일 단계 컴퓨팅을 얻습니다. 이것은 롬복이 찍은 길입니다.

Java 6의 경우 컴파일 프로세스는 다음과 같습니다. javac-> apt-> lombok apt process-> 클래스 파일 읽기 및 ASM을 사용하여 set / get 메소드 추가 .

메커니즘에 대한 자세한 내용을 알려 주시겠습니까?



답변

Sean Patrick Floyd가 말했듯이 롬복은 실제로 내부 API에 대해 코드를 작성합니다. 그러나 롬복은 컴파일 단계 에만 관여하기 때문에 롬복은 햇볕 VM에서만 작동한다고 오해의 소지가 있습니다. ecj 또는 sun의 javac에서만 컴파일됩니다. 그러나 컴파일러를 전혀 제공하지 않는 대다수의 VM은이 두 가지 중 하나입니다. 예를 들어, Apple VM은 주식 선 javac와 함께 제공되며 롬복은 맥에서 잘 작동합니다. 예를 들어 soylatte VM도 마찬가지입니다.

javac의 경우 우리는 실제로 업데이트를 고수해야하지만, 지금은 컴파일러에 대한 많은 작업이 있었기 때문에 많은 버전의 일식에 대한 일식 지원을 약간만 조정해야했습니다. 따라서 내부 API에 대해 코드를 작성하는 동안 비교적 안정적인 비트입니다.

내부 API에 의존하지 않고 롬복이 수행 할 수 있다면 다른 작업을 수행했을 수 있지만 수행 할 수 없으므로 내부 API 사용에 의존합니다.

NB : 저는 롬복의 주요 개발자 중 한 명이므로 약간 편견이 있습니다.


답변

그것은 사용 JSR 269 플러그 주석 처리 API 자바 6에서 사용할 수 있습니다.

lombok.jar라는 파일 이 포함되어 있습니다 /META-INF/services/javax.annotation.processing.Processor. javac컴파일 클래스 경로에서이 파일을 볼 때 컴파일 중에 정의 된 주석 프로세서를 실행합니다.


답변

axtavt의 답변에 대한 부록 : 롬복은 JSR 269 API 노출보다 훨씬 더 많이 사용합니다. a) 내부 javac API 및 b) 내부 이클립스 api (별도의 프로세서)에 대한 롬복 코드. JSR 269에서는 기존 소스 코드를 수정할 수 없지만 Element기본 AST 노드에 캐스트 할 때 실제로 AST (프로젝트 롬복이 수행하는 작업)를 수정할 수 있습니다.

따라서 Lombok은 Sun VM (afaik) 에서만 컴파일을 실행 하는 거대한 핵입니다 . 이 소프트웨어는 훌륭한 소프트웨어이지만 비표준 해킹으로 인해 많은 사람들이 싫어합니다.


답변

Project Lombok : 사용자 지정 변환 만들기 가 도움이됩니다.


답변