Project包含注释处理器,它在编译期间生成java代码。默认情况下,gradle输出生成的源文件到build/classes
目录。这会导致IntelliJ发现新生成的源文件时出现一些问题。
是否有任何直接的方法来配置gradle将源文件输出到另一个目录?例如$buildDir/gen/main/java
或$buildDir/build/generated/main/java
?
答案 0 :(得分:11)
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"
}
}
}
此代码段会执行下一步:
请改用gradle apt plugin。
答案 1 :(得分:4)
只需在build.gradle文件中指定 project.buildDir 属性的值:
project.buildDir = '/gen/main/java'
这会将所有生成的构建文件放到<project_root>/gen/main/java
文件夹中。
答案 2 :(得分:0)
默认情况下,所生成的Java文件位于$ generationFilesBaseDir / $ sourceSet / $ builtinPluginName下,其中$ generationFilesBaseDir默认情况下为$ buildDir / generated / source / proto,并且可以配置。例如,
protobuf {
...
generatedFilesBaseDir = "$projectDir/src/generated"
}
子目录名称(默认为$ builtinPluginName)也可以通过在generateProtoTasks块内的任务配置的buildins或plugins块中设置outputSubDir属性来更改(请参阅上一节)。例如,
{ task ->
task.plugins {
grpc {
// Write the generated files under
// "$generatedFilesBaseDir/$sourceSet/grpcjava"
outputSubDir = 'grpcjava'
}
}
}