롬복은 어떻게 작동하나요?
나는 오늘 롬복이를 만났다.
나는 그것이 어떻게 작동하는지 매우 알고 싶다.
Java Geek 기사는 몇 가지 단서를 제공하지만, 나에게는 완전히 명확하지 않다.
Java 6은 apt를 제거하고 javac이 주석을 관리할 수 있도록 함으로써 프로세스를 간소화하여 보다 단순한 단일 단계 컴퓨팅을 실현합니다.이 길은 롬복의 길이다.
Java 6에서는 컴파일 프로세스가 javac -> apt -> lombok apt process -> ASM을 사용하여 클래스 파일을 읽고 set/get 메서드를 추가합니다.
메커니즘에 대해 좀 더 자세히 알려주시겠어요?
Lombok은 Sean Patrick Floyd가 말한 것처럼 내부 API에 대해 코드를 작성합니다.그러나 롬복의 경우 컴파일 단계에만 관여하기 때문에 롬복의 경우 Sun VM에서만 실행된다고 오인할 수 있습니다.ecj나 sun의 javac에서만 컴파일됩니다.그러나 컴파일러를 출하하는 경우 VM의 대부분은 그 두 가지 중 하나입니다.예를 들어 Apple VM에는 stock sun javac이 탑재되어 있기 때문에 lombok은 Mac에서 정상적으로 동작합니다.예를 들어 soylatte VM도 마찬가지입니다.
javac의 경우 컴파일러에 대한 많은 작업이 현재 진행 중이기 때문에 업데이트를 계속해야 하지만 많은 버전의 이클립스 지원을 한 번만 약간만 조정해야 했습니다.따라서 내부 API에 대해 코드를 작성하지만 비교적 안정적인 비트입니다.
내부 API를 이용하지 않고 롬복의 작업을 수행할 수 있다면 다른 작업을 할 수 있었을 텐데, 불가능하기 때문에 내부 API 사용에 의존합니다.
NB: 저는 롬복의 주요 개발자 중 한 명입니다.그래서 아마 조금 편견이 있는 것 같습니다.p
Java 6에서 사용할 수 있는 JSR 269 Pluggable Annotation Processing API를 사용합니다.
주의:lombok.jar
라는 이름의 파일이 포함되어 있습니다./META-INF/services/javax.annotation.processing.Processor
.언제javac
는 컴파일 클래스 경로에서 이 파일을 보고 컴파일 중에 정의된 주석 프로세서를 실행합니다.
axtavt의 답변 부록: Lombok은 JSR 269 api가 제공하는 것보다 훨씬 더 많은 것을 사용합니다.Lombok은 a) 내부 javac apis 및 b) 내부 이클립스 apis(별도의 프로세서)에 대해 코드화됩니다.JSR 269에서는 기존 소스 코드를 수정할 수 없지만 를 기본 AST 노드에 캐스팅하면 실제로 AST(프로젝트 Lombok의 작업)를 수정할 수 있습니다.
그래서 롬복이란 javac이나 이클립스 컴파일러를 사용해서만 컴파일을 하는 거대한 해킹이다.이 소프트웨어는 훌륭한 소프트웨어이지만 표준이 아닌 해킹으로 인해 많은 사람들에게 미움을 받고 있습니다.
프로젝트 롬복: 커스텀 트랜스포메이션의 작성은 도움이 됩니다.
언급URL : https://stackoverflow.com/questions/6107197/how-does-lombok-work
'source' 카테고리의 다른 글
POSIX 소켓을 플러시하는 방법이 있습니까? (0) | 2022.08.03 |
---|---|
'안드로이드'를 어떻게 고치죠?Network On Main Thread Exception'? (0) | 2022.08.03 |
문자열이 null과 동일한지 확인하는 방법 (0) | 2022.08.01 |
String.split()을 여러 딜리미터와 함께 사용합니다. (0) | 2022.08.01 |
@nuxtjs/auth를 사용하여 오류 서버 응답을 캡처합니다. (0) | 2022.08.01 |