在gradle中更改生成代码的输出目录
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在gradle中更改生成代码的输出目录相关的知识,希望对你有一定的参考价值。
Project包含注释处理器,它在编译期间生成Java代码。默认情况下,gradle输出生成的源文件到build/classes
目录。这会导致IntelliJ发现新生成的源文件时出现一些问题。
是否有任何直接的方法配置gradle将源文件输出到另一个目录?例如$buildDir/gen/main/java
或$buildDir/build/generated/main/java
?
java编译器有一个选项,允许自定义生成的java源(documentation)的输出目录。
-s dir
指定放置生成的源文件的目录。该目录必须已存在; javac不会创建它。如果类是包的一部分,则编译器将源文件放在反映包名的子目录中,根据需要创建目录。例如,如果指定-s C: mysrc并且该类名为com.mypackage.MyClass,则源文件将放在C: mysrc com mypackage MyClass.java中。
build.gradle
的例子
compileJava {
options.compilerArgs << "-s"
options.compilerArgs << "$projectDir/generated/java"
doFirst {
// make sure that directory exists
file(new File(projectDir, "/generated/java")).mkdirs()
}
}
clean.doLast {
// clean-up directory when necessary
file(new File(projectDir, "/generated")).deleteDir()
}
sourceSets {
generated {
java {
srcDir "$projectDir/generated/java"
}
}
}
这段代码片段接下来会:
- 创建并指定目录作为生成代码的输出
- 删除生成的干净任务源
- 添加新的源集
Update
请改用gradle apt plugin。
只需在build.gradle文件中指定project.buildDir属性的值:
project.buildDir = '/gen/main/java'
这会将所有生成的构建文件放到<project_root>/gen/main/java
文件夹中。
默认情况下,生成的Java文件位于$ generatedFilesBaseDir / $ sourceSet / $ builtinPluginName下,其中$ generatedFilesBaseDir默认为$ buildDir / generated / source / proto,并且是可配置的。例如。,
protobuf {
...
generatedFilesBaseDir = "$projectDir/src/generated"
}
子目录名称(默认情况下为$ builtinPluginName)也可以通过在generateProtoTasks块中的任务配置的builtins或plugins块中设置outputSubDir属性来更改(请参阅上一节)。例如。,
{ task ->
task.plugins {
grpc {
// Write the generated files under
// "$generatedFilesBaseDir/$sourceSet/grpcjava"
outputSubDir = 'grpcjava'
}
}
}
看看github protobuf-gradle-plugin
以上是关于在gradle中更改生成代码的输出目录的主要内容,如果未能解决你的问题,请参考以下文章
使生成代码的自定义 Gradle 任务在 IDE 导入时运行
在构建 gradle 和提交中更改版本代码后,不使用 devops Pipeline 生成 Android APK 版本明智