google / google/protobuf-gradle-plugin
Option to disable/customize `sourceSets` for protoc plugins
- Dominant language
- Groovy
- Stars
- 1.8k
- Forks
- 288
- PR merge metrics
- No merged PRs in 30d
Description
Hi,
I am trying to migrate our codebase from Maven to Gradle. We are using the `protoc-gen-jsonschema` plugin to generate JSON Schema from the defined proto files. The configuration file looks like this:
```kotlin
protobuf {
protoc {
artifact = "com.google.protobuf:protoc:3.18.1"
}
generateProtoTasks {
ofSourceSet(sourceSets["main"].name).all {
val jsonSchema by plugins.register("jsonschema") {
outputSubDir = "jsonschema-res"
option("prefix_schema_files_with_package")
option("disallow_additional_properties")
option("disallow_bigints_as_strings")
}
}
}
```
The above code seems to work, but the generated JSON schema files are included in the JAR generated by the `jar` task. Apparently, this plugin seems to add the protoc plugin's `outputSubDir` to `sourceSets.java` regardless of the content generated by the protoc plugin. So the workaround I had to do was to move all the generated JSON schemas into a separate directory and add it to the `resources` sourceSet.
```kotlin
protobuf {
generateProtoTasks {
ofSourceSet(sourceSets["main"].name).all {
// ...
val outputBaseDir = file(outputBaseDir)
val jsonSchemaDir = outputBaseDir.resolve(jsonSchema.outputSubDir)
val jsonSchemaResDir = outputBaseDir.resolve("jsonschema")
val jsonSchemaResSubDir = jsonSchemaResDir.resolve("jsonschema")
sourceSets["main"].resources.srcDir(jsonSchemaResDir)
doLast {
copy { from(jsonSchemaDir); into(jsonSchemaResSubDir) }
delete(jsonSchemaDir)
}
// ...
}
}
}
```
I was wondering if there is an option to disable/customize files added to the `sourceSet` on a per-plugin basis. I went through the plugin code and was not able to find anything that would allow me to do this. I was also wondering if there are any other better ways to achieve the same.
Thanks in advance.
Contributor guide
Assessment
This issue has not been assessed yet.