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

时间:2016-05-29 17:16:26

标签: java gradle code-generation

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

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

3 个答案:

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

此代码段会执行下一步:

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

更新

请改用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'
    }
  }
}

看到github protobuf-gradle-plugin