在 gradle 中更改生成代码的输出目录
Change output directory of generated code in gradle
项目包含在编译期间生成 java 代码的注解处理器。默认情况下,gradle 将生成的源文件输出到 build/classes
目录。这会导致 IntelliJ 发现新生成的源文件时出现一些问题。
有什么简单的方法可以配置 gradle 将源文件输出到另一个目录?例如 $buildDir/gen/main/java
或 $buildDir/build/generated/main/java
?
java 编译器有一个选项,允许为生成的 java 源 (documentation) 自定义输出目录。
-s dir
Specify the directory where to place generated source files. The
directory must already exist; javac will not create it. If a class is
part of a package, the compiler puts the source file in a subdirectory
reflecting the package name, creating directories as needed. For
example, if you specify -s C:\mysrc and the class is called
com.mypackage.MyClass, then the source file will be placed in
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"
}
}
}
此代码片段接下来执行:
- 创建目录并将其指定为生成代码的输出
- 如果调用清理任务,则删除生成的源
- 添加新的源集
更新
改用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
,也可以通过在 [=17] 内的任务配置的内置或插件块中设置 outputSubDir
属性 来更改=] 块(参见上一节)。例如,
{
task ->
task.plugins {
grpc {
// Write the generated files under
// "$generatedFilesBaseDir/$sourceSet/grpcjava"
outputSubDir = 'grpcjava'
}
}
}
项目包含在编译期间生成 java 代码的注解处理器。默认情况下,gradle 将生成的源文件输出到 build/classes
目录。这会导致 IntelliJ 发现新生成的源文件时出现一些问题。
有什么简单的方法可以配置 gradle 将源文件输出到另一个目录?例如 $buildDir/gen/main/java
或 $buildDir/build/generated/main/java
?
java 编译器有一个选项,允许为生成的 java 源 (documentation) 自定义输出目录。
-s dir
Specify the directory where to place generated source files. The directory must already exist; javac will not create it. If a class is part of a package, the compiler puts the source file in a subdirectory reflecting the package name, creating directories as needed. For example, if you specify -s C:\mysrc and the class is called com.mypackage.MyClass, then the source file will be placed in 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"
}
}
}
此代码片段接下来执行:
- 创建目录并将其指定为生成代码的输出
- 如果调用清理任务,则删除生成的源
- 添加新的源集
更新
改用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
,也可以通过在 [=17] 内的任务配置的内置或插件块中设置 outputSubDir
属性 来更改=] 块(参见上一节)。例如,
{
task ->
task.plugins {
grpc {
// Write the generated files under
// "$generatedFilesBaseDir/$sourceSet/grpcjava"
outputSubDir = 'grpcjava'
}
}
}