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

2022-09-03 05:55:02

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

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


答案 1

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

-s 目录

指定放置生成的源文件的目录。该目录必须已经存在;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 插件代替。


答案 2

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

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

这会将所有生成的生成文件放入该文件夹。<project_root>/gen/main/java


推荐