kapt 生成的代码在编译阶段不可用

kapt generated code not available during compilation phase

我已经使用 kapt 编写了一个代码生成器,并在一个使用 maven 编译 kotlin 的项目中使用它。

我发现 kapt 生成器是在 Kotlin 的编译阶段之后调用的,这使我无法在同一项目中使用 kotlin 中生成的代码。

但是,如果我在同一个项目的 Java 中引用生成的 类,它工作正常。这是因为 java 编译阶段在 kotlin 的生成阶段之后。

我在 Maven 配置中指定了 Kotlin 编译目标之前的 kapt 目标(如 docs 中所述),但它似乎没有什么不同:

        <plugin>
            <artifactId>kotlin-maven-plugin</artifactId>
            <groupId>org.jetbrains.kotlin</groupId>
            <version>${kotlin.version}</version>
            <executions>
                <execution>
                    <id>kapt</id>
                    <goals>
                        <goal>kapt</goal>
                    </goals>
                    <configuration>
                        <sourceDirs>
                            <sourceDir>src/main/java</sourceDir>
                        </sourceDirs>
                        <annotationProcessorPaths>
                            <annotationProcessorPath>
                                <groupId>lang.taxi</groupId>
                                <artifactId>taxi-annotation-processor</artifactId>
                                <version>${taxi.version}</version>
                            </annotationProcessorPath>
                        </annotationProcessorPaths>
                    </configuration>
                </execution>
                <execution>
                    <id>compile</id>
                    <goals> <goal>compile</goal> </goals>
                </execution>
                <execution>
                    <id>test-compile</id>
                    <goals> <goal>test-compile</goal> </goals>
                    <configuration>
                        <sourceDirs>
                            <sourceDir>${project.basedir}/src/test/kotlin</sourceDir>
                            <sourceDir>${project.basedir}/src/test/java</sourceDir>
                        </sourceDirs>
                    </configuration>
                </execution>
            </executions>
        </plugin>

是否可以配置 Kotlin 以允许我在同一个项目中使用 Kotlin 生成的代码?

问题是 kotlin-maven-plugin 是在父 pom 中定义的,没有 kapt 目标,然后又在模块自己的 pom 中定义了 kapt。

这导致编译任务在 kapt 任务之前 运行,即使模块的 pom 在 compile.

之前指定了 kapt 的顺序

删除父 pom 条目解决了问题。

您可以使用 gradle DAG 来解决您的问题,只需让 compile/assemble 任务依赖于 kapt 任务即可。我知道如何在 android 中执行此操作,如果对您有帮助,请告诉我,我将在 post 之后立即提供代码。