当前位置: 首页 > 知识库问答 >
问题:

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

戚成礼
2023-03-14

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

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

然而,如果我在同一个项目中引用Java内部生成的类,它就能很好地工作。这是因为java编译阶段在kotlin的生成阶段之后。

我已经在maven配置中指定了静态编程语言编译目标之前的kapt目标(如文档中所述),但似乎没有什么不同:

        <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>

是否可以配置静态编程语言以允许我在同一项目中使用静态编程语言生成的代码?

共有2个答案

宋飞文
2023-03-14

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

胥博文
2023-03-14

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

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

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

 类似资料:
  • 我使用了Jooq官方网站上的这个工具:https://github.com/etiennestuder/gradle-jooq-plugin从我的数据库生成代码。 但如果我设置

  • 我还想知道是否会有更直接的方法来编译和运行生成的代码。

  • 问题内容: 我有一个maven项目,该项目使用wsgen从已编译的Java类生成XSD文件。 问题是我想将生成的文件作为资源添加到jar中。但是由于该阶段在该阶段之前运行,所以无法添加它们。 有没有办法告诉Maven添加在该阶段生成的其他资源? 问题答案: 我建议将XSD文件的输出目录定义为target / classs(可能带有一个补充子文件夹,该子文件夹稍后将在打包阶段打包到jar中。这可以通

  • 至少在GCC中,如果我们提供生成汇编代码的选项,编译器会通过创建一个包含汇编代码的文件来服从。但是,当我们简单地运行命令而没有任何选项时,它不会在内部生成汇编代码吗? 如果是,那么为什么它需要首先生成一个汇编代码,然后将其翻译成机器语言?

  • 生成的服务代理上的3.5.1版编译失败,错误-未报告的异常java.io。不支持的编码异常;必须被抓到或宣布被抛出 在“扔t”上生成错误的代理代码- 堆栈跟踪-

  • 问题内容: 请帮助我,如何使AngularJS编译指令生成的代码? 您甚至可以在这里找到相同的代码,http://jsbin.com/obuqip/4/edit 的HTML Java脚本 问题答案: 这是一个既不使用编译功能也不使用链接功能的版本: 请注意,模板被包装在中,因为模板需要具有一个根元素。(如果没有,它将有两个 根元素。) 需要对HTML进行少许修改以进行插值: 小提琴。