Change output directory of generated code in gradle
There is an option for java compiler which allows to customize output directory for generated java sources (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.
Example of 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"
}
}
}
This code snippet does next:
- creates and specifies directory as output for generated code
- deletes generated sources if clean task is invoked
- adds new source set
Update
Use gradle apt plugin instead.
By default generated Java files are under $generatedFilesBaseDir/$sourceSet/$builtinPluginName
, where $generatedFilesBaseDir
is $buildDir/generated/source/proto
by default, and is configurable. E.g.,
protobuf {
...
generatedFilesBaseDir = "$projectDir/src/generated"
}
The subdirectory name, which is by default $builtinPluginName
, can also be changed by setting the outputSubDir
property in the builtins or plugins block of a task configuration within generateProtoTasks
block (see previous section). E.g.,
{
task ->
task.plugins {
grpc {
// Write the generated files under
// "$generatedFilesBaseDir/$sourceSet/grpcjava"
outputSubDir = 'grpcjava'
}
}
}
to see github protobuf-gradle-plugin
Simply specify value for project.buildDir property in your build.gradle file:
project.buildDir = '/gen/main/java'
This will put all generated build files to the <project_root>/gen/main/java
folder.