在gradle中更改生成代码的输出目录

Project包含注释处理器,它在编译期间生成java代码。 默认情况下,gradle输出生成的源文件到build/classes目录中。 这会导致IntelliJ发现新生成的源文件时出现一些问题。

是否有任何直接的方法配置gradle将源文件输出到另一个目录? 例如$buildDir/gen/main/java$buildDir/build/generated/main/java

java编译器有一个选项,允许自定义生成的java源( 文档 )的输出目录。

-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" } } } 

这段代码片段接下来会:

  • 创建并指定目录作为生成代码的输出
  • 如果调用了clean任务,则删除生成的源
  • 添加新的源集

更新

请改用gradle apt插件 。

只需在build.gradle文件中指定project.buildDir属性的值:

 project.buildDir = '/gen/main/java' 

这会将所有生成的构建文件放到/gen/main/java文件夹中。