我尝试使用kapt
和vertx-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/
。你能帮助我吗...? 最佳答案
生成Kotlin来源:
我设法通过使用javac参数解决了生成的Kotlin源的问题:
val generatedKotlinSources = project.file("src/main/generated").path
kapt {
javacOptions {
option("-Akapt.kotlin.generated=$generatedKotlinSources")
}
}
(令人惊讶的是,option("-Akapt.kotlin.generated", generatedKotlinSources)
无法正常工作。)如Annotation Processing with Kotlin页面所述,此解决方案可与使用
processingEnv.options["kapt.kotlin.generated"]
的注释处理器一起使用。生成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"
选项的默认值。)关于kotlin - 如何更改kapt插件生成输出dir路径?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57533249/