Plugin
Plugin (javac 플러그인 인터페이스)
javac 플러그인을 정의하기 위한 인터페이스입니다. 컴파일이 시작된 직후 실행할 플러그인을 하나 이상 등록해서, 컴파일 과정에 기능을 끼워 넣을 수 있어요.
본문
javac 플러그인 메커니즘을 이용하면 컴파일 명령줄에 플러그인을 하나 이상 지정해 컴파일이 시작된 직후 실행되게 할 수 있습니다. 플러그인은 사용자 친화적인 이름으로 식별되며, 시작되는 각 플러그인에는 문자열 배열이 전달되는데 이 배열을 통해 원하는 옵션이나 인자를 넘길 수 있어요.
플러그인은 ServiceLoader로 찾아집니다. 사용되는 클래스패스는 애노테이션 프로세서와 동일한데, 즉 ANNOTATION_PROCESSOR_PATH 또는 -processorpath 경로예요.
전형적인 플러그인은 단순히 TaskListener를 등록해서 컴파일 실행 중 발생하는 이벤트를 통보받고, 나머지 작업은 그 리스너가 처리하는 구조입니다. 컴파일의 특정 단계를 감시하거나 트리에 개입하는 방식으로 기능을 확장할 수 있어요.
플러그인을 직접 만들 때는 getName()이 반환하는 이름이 명령줄에서 플러그인을 지정할 때 쓰이므로 명확하게 정하는 게 좋습니다. init은 컴파일 작업이 막 시작된 시점에 호출되므로, 여기서 리스너를 등록하면 컴파일 전 과정을 관찰할 수 있어요.
메서드
-
getName()— 플러그인의 사용자 친화적인 이름을 반환합니다. -
init(JavacTask task, String... args)— 주어진 컴파일 작업에 대해 플러그인을 초기화해요.task는 막 시작된 컴파일 작업이고,args는 플러그인에 전달할 인자들입니다. -
autoStart()(기본 구현) — 명령줄 옵션에 명시하지 않아도 이 플러그인을 자동으로 시작할지 여부를 반환합니다. javac가 서비스 로더로 찾은 모든 플러그인에 대해 이 메서드를 호출하며,true를 반환하면 명령줄 옵션으로 초기화되지 않은 경우 빈 문자열 배열로 초기화됩니다.