【问题标题】:kapt generated code not available during compilation phasekapt 生成的代码在编译阶段不可用
【发布时间】:2019-03-20 01:13:18
【问题描述】:

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

我发现在 Kotlin 的编译阶段之后调用了 kapt 生成器,这使我无法在同一项目中使用 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 生成的代码?

【问题讨论】:

标签: maven kotlin kapt


【解决方案1】:

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

这导致编译任务在 kapt 任务之前运行,即使模块的 pom 在 compile 之前指定了 kapt 的顺序。

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2016-04-12
      • 2023-03-25
      • 2015-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-13
      • 1970-01-01
      相关资源
      最近更新 更多