Development Tip

Kotlin에 Java Lombok 접근자가 표시되지 않나요?

yourdevel 2021. 1. 8. 22:30
반응형

Kotlin에 Java Lombok 접근자가 표시되지 않나요?


Kotlin 1.0.0 릴리스 사용 (IntelliJ 15에서 컴파일).

println(myPojoInstance.foo)

Lombok 기반 POJO를 참조하는 코드 (IntelliJ 또는 Gradle에서)를 컴파일하려고하면 " 'foo'에 액세스 할 수 없습니다."MyPojo "에서 'private'입니다. 사실, 모두 비공개이며 내 개체입니다. lombok 주석에 대한 @Value @Builder가 있습니다.

특별히 getFoo ()를 호출 해 보았지만 "getFoo에 대한 미해결 참조"라고 표시됩니다. Kotlin에게 롬복 주석을 처리하는 방법을 알리는 몇 가지 트릭이 있습니까?


일반적으로 그렇지 않습니다. 그 동작의 이유는 Lombok이 javac에 대한 주석 프로세서이지만 kotlin 컴파일러가 실행될 때 javac도 사용하지만 주석 처리가 없기 때문에 kotlin은 아직 생성되지 않은 선언을 볼 수 없습니다.

현재 유일한 해결 방법은 엄격한 컴파일 순서를 정의하는 것입니다. Java는 먼저 kotlin 이후입니다. 안타깝게도이 접근 방식에는 큰 단점이 있습니다.이 경우 Java의 Kotlin 코드를 사용할 수 없습니다. 이를 해결하려면 많은 고통을 유발할 수있는 다중 모듈 프로젝트가 필요할 수 있습니다.


Sergey Mashkov의 응답에 추가하기 위해 (여기에 댓글을 달 수있는 담당자 포인트가 충분하지 않습니다.) 여기 에 Kotlin이 Kapt 또는 delomboking없이 Lombok에서 생성 된 코드를 볼 수있는 Gradle 다중 프로젝트 설정 예제 앱 이 있습니다. 적용해야합니다. 즉, Kotlin은 자바 코드를 호출 할 수 있지만 자바는 특정 모듈에서 Kotlin 코드를 호출 할 수 없습니다 (순환 종속성을 생성하므로). 이러한 종류의 빌드는 기존 자바 코드베이스가 있고 하지만 모든 새로운 코드는 Kotlin으로 작성되었습니다.

하지만 Lombok / Kotlin의 완전한 지원을보고 싶습니다. Kotlin은 Java와 완전히 상호 운용되지만 실제로는 Lombok이 매우 널리 사용되며이 문제로 인해 Kotlin으로 전환하려는 많은 개발자가 그렇게하지 못할 수 있습니다.


위의 주석에서 언급했듯이 delombok이 도움이됩니다. maven 빌드의 경우 다음과 같습니다.

<plugin>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok-maven-plugin</artifactId>
    <version>${lombok.version}.0</version>
    <executions>
        <execution>
            <id>delombok</id>
            <phase>generate-sources</phase>
            <goals>
                <goal>delombok</goal>
            </goals>
            <configuration>
                <formatPreferences>
                    <javaLangAsFQN>skip</javaLangAsFQN>
                </formatPreferences>
                <verbose>true</verbose>
            </configuration>
        </execution>
        <execution>
            <id>test-delombok</id>
            <phase>generate-test-sources</phase>
            <goals>
                <goal>testDelombok</goal>
            </goals>
            <configuration>
                <verbose>true</verbose>
            </configuration>
        </execution>
    </executions>
</plugin>

사이트 에 따라 delombok을 사용 하고 build> plugins> plugin> kotlin-maven-plugin 아래의 pom.xml에 target / generated-sources / delombok 폴더를 추가하면 작동하는 것 같습니다.

참조 URL : https://stackoverflow.com/questions/35517325/kotlin-doesnt-see-java-lombok-accessors

반응형