将Kotlin与生成的Java类集成

将Kotlin与生成的Java类集成,kotlin,annotation-processing,immutables-library,Kotlin,Annotation Processing,Immutables Library,我们使用注释处理框架(不可变)从接口生成Java类 现在我必须从kotlin类访问这些生成的类。虽然在Java中这很好,但Kotlin编译器无法找到它们 以下是maven配置: <plugin> <groupId>org.jetbrains.kotlin</groupId> <artifactId>kotlin-maven-plugin</artifactId>

我们使用注释处理框架(不可变)从接口生成Java类

现在我必须从kotlin类访问这些生成的类。虽然在Java中这很好,但Kotlin编译器无法找到它们

以下是maven配置:

        <plugin>
            <groupId>org.jetbrains.kotlin</groupId>
            <artifactId>kotlin-maven-plugin</artifactId>
            <version>${kotlin.version}</version>
            <executions>
                <execution>
                    <id>compile</id>
                    <phase>compile</phase>
                    <goals>
                        <goal>compile</goal>
                    </goals>
                    <configuration>
                        <sourceDirs>
                            <sourceDir>${project.basedir}/src/main/java</sourceDir>
                        </sourceDirs>
                    </configuration>
                </execution>
                <execution>
                    <id>test-compile</id>
                    <phase>test-compile</phase>
                    <goals>
                        <goal>test-compile</goal>
                    </goals>
                    <configuration>
                        <sourceDirs>
                            <sourceDir>${project.basedir}/src/test/java</sourceDir>
                        </sourceDirs>
                    </configuration>
                </execution>
            </executions>
        </plugin>

        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <executions>
                <!-- Replacing default-compile as it is treated specially by maven -->
                <execution>
                    <id>default-compile</id>
                    <phase>none</phase>
                </execution>
                <!-- Replacing default-testCompile as it is treated specially by maven -->
                <execution>
                    <id>default-testCompile</id>
                    <phase>none</phase>
                </execution>
                <execution>
                    <id>java-compile</id>
                    <phase>compile</phase>
                    <goals> <goal>compile</goal> </goals>
                </execution>
                <execution>
                    <id>java-test-compile</id>
                    <phase>test-compile</phase>
                    <goals> <goal>testCompile</goal> </goals>
                </execution>
            </executions>
        </plugin>

org.jetbrains.kotlin
kotlin maven插件
${kotlin.version}
编译
编译
编译
${project.basedir}/src/main/java
测试编译
测试编译
测试编译
${project.basedir}/src/test/java
maven编译器插件
默认编译
没有一个
默认测试编译
没有一个
java编译
编译
编撰
java测试编译
测试编译
测试编译
Kotlin版本是1.2.10(但与1.2.20相同)。 交换插件声明没有帮助。 如何配置它?

Kotlin编译器在Java编译器之前运行。要使创建的类可用于Kotlin,您必须使用并定义其中的每个注释处理器

<execution>
    <id>kapt</id>
    <goals>
        <goal>kapt</goal>
    </goals>
    <configuration>
        <sourceDirs>
            <sourceDir>${project.basedir}/src/main/kotlin</sourceDir>
            <sourceDir>${project.basedir}/src/main/java</sourceDir>
        </sourceDirs>
        <annotationProcessorPaths>
            <annotationProcessorPath>
                <groupId>org.immutables</groupId>
                <artifactId>value</artifactId>
                <version>2.5.5</version>
            </annotationProcessorPath>
        </annotationProcessorPaths>
    </configuration>
</execution>

卡普特
卡普特
${project.basedir}/src/main/kotlin
${project.basedir}/src/main/java
org.immutables
价值
2.5.5

kapt被执行并找到不可变的jar。但是类没有生成,编译器仍然失败<代码>[INFO][kapt]Kapt3已启用。[INFO][kapt]注释处理模式:存根和APT[INFO][kapt]使用灯光分析:真[INFO][kapt]更正错误类型:假[INFO][kapt]源输出目录:/target/generated sources/kapt/compile[INFO][kapt]Classes输出目录:/target/Classes[INFO][kapt]存根输出目录:/target kaptsttubs/compile[INFO][kapt]增量数据输出目录:nullkapt是为Java文件执行注释处理器,还是仅为Kotlin文件执行注释处理器?带注释的类仍然是Java类。您在给定目录中找到生成的类或存根了吗?好的,它适用于两个扩展其他简单接口(其中没有不可变配置)的接口。似乎kapt在生成这些方面存在问题。通过java注释处理,这不是问题……解决了。我在kapt中发现了一个奇怪的bug,它与不可变项相结合:我们对不可变项使用自定义注释。这些必须在文件
src/main/resources/META-INF/annotations/org.immutables.value.immutable
中配置。但是,除了由该项目所依赖的maven项目提供自定义注释的类之外,没有生成所有具有自定义注释的类。如果我将自定义注释添加到另一个项目中的文件中,它将正常工作。这意味着kapt不使用给定src/main/java文件夹中的文件,而只使用类路径上的文件!