Lombok 컴파일러 플러그인

Lombok 컴파일러 플러그인

Kotlin Lombok 컴파일러 플러그인을 사용하면 같은 혼합(Java/Kotlin) 모듈 안에서 Kotlin 코드가 Java의 Lombok 선언을 생성하고 사용할 수 있어요. 만약 다른 모듈에서 그런 선언을 호출한다면, 그 모듈을 컴파일할 때는 이 플러그인이 필요 없어요.

Lombok 컴파일러 플러그인은 Lombok을 대체할 수는 없지만, 혼합 Java/Kotlin 모듈에서 Lombok이 동작하도록 도와줘요. 따라서 이 플러그인을 쓸 때도 Lombok을 평소처럼 설정해야 해요. Lombok 컴파일러 플러그인 설정 방법을 더 알아보세요.

출처: Lombok compiler plugin

본문

지원되는 어노테이션

플러그인은 다음 어노테이션을 지원해요:

  • @Getter, @Setter
  • @Builder, @SuperBuilder
  • @NoArgsConstructor, @RequiredArgsConstructor, @AllArgsConstructor
  • @Data
  • @With
  • @Value

플러그인 개발은 계속 진행 중이에요. 자세한 현재 상태는 Lombok 컴파일러 플러그인의 README를 확인해요. 현재로서는 @Tolerate 어노테이션을 지원할 계획은 없어요. 다만 YouTrack의 @Tolerate 이슈에 투표해 주시면 고려할 수 있어요.

참고: Kotlin 코드에서 Lombok 어노테이션을 사용하면 Kotlin 컴파일러는 이를 무시해요.

Gradle

build.gradle(.kts) 파일에 kotlin-plugin-lombok Gradle 플러그인을 적용해요:

plugins {
    kotlin("plugin.lombok") version "2.4.20"
    id("io.freefair.lombok") version "9.5.0"
}
plugins {
    id 'org.jetbrains.kotlin.plugin.lombok' version '2.4.20'
    id 'io.freefair.lombok' version '9.5.0'
}

Lombok 컴파일러 플러그인을 사용한 예제가 있는 테스트 프로젝트를 확인해요.

Lombok 설정 파일 사용하기

Lombok 설정 파일 lombok.config를 사용한다면, 플러그인이 찾을 수 있도록 파일 경로를 설정해야 해요. 경로는 모듈 디렉터리 기준의 상대 경로여야 해요. 예를 들어 build.gradle(.kts) 파일에 다음 코드를 추가해요:

kotlinLombok {
    lombokConfigurationFile(file("lombok.config"))
}
kotlinLombok {
    lombokConfigurationFile file("lombok.config")
}

Lombok 컴파일러 플러그인과 lombok.config를 사용한 예제가 있는 테스트 프로젝트를 확인해요.

Maven

Lombok 컴파일러 플러그인을 사용하려면 compilerPlugins 섹션에 lombok 플러그인을 추가하고, dependencies 섹션에 kotlin-maven-lombok 의존성을 추가해요. Lombok 설정 파일 lombok.config를 사용한다면 pluginOptions에서 플러그인에 경로를 제공해요. pom.xml 파일에 다음 줄을 추가해요:

<plugin>
    <groupId>org.jetbrains.kotlin</groupId>
    <artifactId>kotlin-maven-plugin</artifactId>
    <version>${kotlin.version}</version>
    <configuration>
        <compilerPlugins>
            <plugin>lombok</plugin>
        </compilerPlugins>
        <pluginOptions>
            <option>lombok:config=${project.basedir}/lombok.config</option>
        </pluginOptions>
    </configuration>
    <dependencies>
        <dependency>
            <groupId>org.jetbrains.kotlin</groupId>
            <artifactId>kotlin-maven-lombok</artifactId>
            <version>${kotlin.version}</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.20</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>
</plugin>

Lombok 컴파일러 플러그인과 lombok.config를 사용한 테스트 프로젝트 예제를 확인해요.

kapt와 함께 사용하기

기본적으로 kapt 컴파일러 플러그인은 모든 어노테이션 프로세서를 실행하고 javac의 어노테이션 처리를 비활성화해요. kapt와 함께 Lombok을 실행하려면, javac의 어노테이션 프로세서가 계속 동작하도록 kapt를 설정해요.

Gradle을 사용한다면 build.gradle(.kts) 파일에 옵션을 추가해요:

kapt {
    keepJavacAnnotationProcessors = true
}

Maven에서는 다음 설정을 이용해 Java 컴파일러로 Lombok을 실행해요:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.5.1</version>
    <configuration>
        <source>1.8</source>
        <target>1.8</target>
        <annotationProcessorPaths>
            <annotationProcessorPath>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>${lombok.version}</version>
            </annotationProcessorPath>
        </annotationProcessorPaths>
    </configuration>
</plugin>

어노테이션 프로세서가 Lombok이 생성한 코드에 의존하지 않는다면, Lombok 컴파일러 플러그인은 kapt와 올바르게 동작해요. kapt와 Lombok 컴파일러 플러그인을 사용한 테스트 프로젝트 예제를 살펴보세요:

  • Gradle 사용
  • Maven 사용

명령줄 컴파일러

Lombok 컴파일러 플러그인 JAR은 Kotlin 컴파일러의 바이너리 배포판에 포함돼 있어요. Xplugin kotlinc 옵션으로 JAR 파일 경로를 지정해 플러그인을 연결할 수 있어요:

-Xplugin=$KOTLIN_HOME/lib/lombok-compiler-plugin.jar

lombok.config 파일을 사용하려면, <PATH_TO_CONFIG_FILE>lombok.config 경로로 바꿔요:

# The plugin option format is: "-P plugin:<plugin id>:<key>=<value>". 
# Options can be repeated.

-P plugin:org.jetbrains.kotlin.lombok:config=<PATH_TO_CONFIG_FILE>

더 알아보기