如何更改 kapt 插件生成输出目录路径?

Posted

技术标签:

【中文标题】如何更改 kapt 插件生成输出目录路径?【英文标题】:How to change kapt plugin generate output dir path? 【发布时间】:2019-12-23 06:52:58 【问题描述】:

我尝试使用kaptvertx-Codegen 来生成我的服务。但是输出路径是/build/generated/source/kapt/main/。我要/src/main/generated/

配置build.gradle.kts,我发现生成adoc/src/main/generated/,但其他文件没有变化。

build.gradle.kts

import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

plugins 
  kotlin("jvm") version "1.3.30"
  kotlin("kapt") version "1.3.30"
  id("io.vertx.vertx-plugin") version "0.8.0"

val vertxVersion = "3.8.0"
// ......
tasks.withType<KotlinCompile> 
  kotlinOptions 
    freeCompilerArgs = listOf("-Xjsr305=strict")
    jvmTarget = "1.8"
  

dependencies 
  // ....
    implementation("io.vertx:vertx-codegen")
    kapt("io.vertx:vertx-service-proxy:$vertxVersion:processor")
    kapt("io.vertx:vertx-codegen:$vertxVersion:processor")
  // ....


kapt
  arguments 
    arg("codegen.output", project.file("src/main/generated").path)
    arg("kapt.kotlin.generated", project.file("src/main/generated").path)
  
  javacOptions 
    option("-AoutputDirectory", project.file("src/main/generated").path)
    option("-Acodegen.output", project.file("src/main/generated").path)
  

我希望输出路径是/src/main/generated/,但实际输出路径是/build/generated/source/kapt/main/。你能帮帮我吗?

【问题讨论】:

【参考方案1】:

生成 Kotlin 源代码:

我设法通过使用 javac 参数解决了生成的 Kotlin 源代码的问题:

val generatedKotlinSources = project.file("src/main/generated").path
kapt 
    javacOptions 
        option("-Akapt.kotlin.generated=$generatedKotlinSources")
    

(令人惊讶的是option("-Akapt.kotlin.generated", generatedKotlinSources) 没用。)

此解决方案适用于使用 processingEnv.options["kapt.kotlin.generated"] 的注释处理器,如 Annotation Processing with Kotlin 页面所述。

生成 Java 源代码:

但是,在生成 Java 源代码时,注释处理器使用 Filer 初始化为 javac context。使用 Java 注释处理器时,您可以使用 -s dir javac argument 覆盖此路径,但此值在 Kapt 中硬编码为 "generated/source/kapt/$sourceSetName" (see source code)。

因此,更改生成的 Java 的输出目录似乎是不可能的。

(是的,"generated/source/kaptKotlin/$sourceSetName" 也是硬编码的,但它被用作"kapt.kotlin.generated" 选项的默认值。)

【讨论】:

以上是关于如何更改 kapt 插件生成输出目录路径?的主要内容,如果未能解决你的问题,请参考以下文章

vscode修改插件安装路径

添加 Kapt 插件后 - 执行 org.jetbrains.kotlin.gradle.internal.KaptExecution 时发生故障

Maven 编译器插件:如何更改 testCompile 的类路径值?

未找到 Gradle DSL 方法:'kapt()'

如何更改生成表中的列顺序(grails 约束不适用于 mongodb 插件)

maven 支持 kapt 吗?