Search code examples
javagradleprotocol-buffersprotobuf-java

Duplicate handling strategy error with gradle while using protobuf for java


I am using the below configuration build.gradle

plugins {
    id "com.google.protobuf" version "0.8.17"
    id "java"
}

group "de.prerna.aws.tests"
version "1.0-SNAPSHOT"

repositories {
    mavenCentral()
}

ext {
  
    protobufVersion = "3.18.1"
}


dependencies {

    implementation "com.google.protobuf:protobuf-java:$protobufVersion"


sourceSets {
    main {
        proto {
            srcDir 'src/main/proto'
        }
        java {
            // include self written and generated code
            srcDirs 'src/main/java'
        }
    }
}

protobuf {
    protoc {

        artifact = 'com.google.protobuf:protoc:4.0.0-rc-2'
    }

    plugins {
        grpc {
            artifact = "io.grpc:protoc-gen-grpc-java:1.39.0"
        }
    }
    generateProtoTasks.generatedFilesBaseDir = 'generated-sources'

    generateProtoTasks {
        all().each { task ->
            task.plugins { grpc{} }
        }
        ofSourceSet('main')

    }
}

Error


* What went wrong:
Execution failed for task ':processResources'.
> Entry Person.proto is a duplicate but no duplicate handling strategy has been set. Please refer to https://docs.gradle.org/7.2/dsl/org.gradle.api.tasks.Copy.html#org.gradle.api.tasks.Copy:duplicatesStrategy for details.


Solution

  • A variant of BParolini for build.gradle (Groovy DSL)

    tasks.withType(Copy) {
        filesMatching("**/*.proto") {
            duplicatesStrategy = DuplicatesStrategy.INCLUDE
        }
    }