Java 重复类com.google.api.Advice

Java 重复类com.google.api.Advice,java,android,gradle,build.gradle,protocol-buffers,Java,Android,Gradle,Build.gradle,Protocol Buffers,我有两个后端支持grpc通信 对于其中的每一个,我都创建了一个简单的android项目,其中包含build.gradle apply plugin: 'com.android.library' apply plugin: 'com.google.protobuf' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' android { compileSdkVersion 23 def

我有两个后端支持grpc通信

对于其中的每一个,我都创建了一个简单的android项目,其中包含build.gradle

apply plugin: 'com.android.library'
apply plugin: 'com.google.protobuf'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'

android {
    compileSdkVersion 23

    defaultConfig {
        versionCode 1
        versionName rootProject.version
        minSdkVersion 15
    }
}

apply plugin: 'maven'

configurations {
    pubReleaseCompile
}


android {
    sourceSets {
        main {
            proto {
                srcDir '../../protos/folder'
            }
        }
    }

}

protobuf {

    protoc { artifact = 'com.google.protobuf:protoc:3.12.2' }
    generatedFilesBaseDir = "$projectDir/src/generated"
    plugins {
        javalite { artifact = "com.google.protobuf:protoc-gen-javalite:3.0.0" }
        grpc { artifact = 'io.grpc:protoc-gen-grpc-java:1.25.0' }
    }
   
    generateProtoTasks {
        all().each { task ->
            task.plugins {
                javalite {}
                grpc {
                    option 'lite'
                }
            }
        }
    }
}

dependencies {
    protobuf files('../protos')
    implementation 'io.grpc:grpc-protobuf-lite:1.25.0'
    implementation 'io.grpc:grpc-okhttp:1.25.0'
    implementation 'io.grpc:grpc-stub:1.25.0'
    implementation 'javax.annotation:javax.annotation-api:1.3.2'
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"

    protobuf 'com.google.api.grpc:proto-google-common-protos:1.18.0'
}
    implementation ('backend1-client'){
        exclude group: 'com.google.grpc', module: 'proto-google-common-protos'
    }

    implementation 'backend2-client'
客户端生成工作正常,但当我试图在android应用程序中同时导入这两个客户端时,出现了很多类似这样的错误

在模块jetified-backend1-runtime.jar(backend1)和jetified-backend2-runtime.jar(backend2)中找到重复类com.google.type.TimeZoneOrBuilder

看起来两个grpc客户端都有相同的google类

在我的android应用程序中,我有以下build.gradle

apply plugin: 'com.android.library'
apply plugin: 'com.google.protobuf'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'

android {
    compileSdkVersion 23

    defaultConfig {
        versionCode 1
        versionName rootProject.version
        minSdkVersion 15
    }
}

apply plugin: 'maven'

configurations {
    pubReleaseCompile
}


android {
    sourceSets {
        main {
            proto {
                srcDir '../../protos/folder'
            }
        }
    }

}

protobuf {

    protoc { artifact = 'com.google.protobuf:protoc:3.12.2' }
    generatedFilesBaseDir = "$projectDir/src/generated"
    plugins {
        javalite { artifact = "com.google.protobuf:protoc-gen-javalite:3.0.0" }
        grpc { artifact = 'io.grpc:protoc-gen-grpc-java:1.25.0' }
    }
   
    generateProtoTasks {
        all().each { task ->
            task.plugins {
                javalite {}
                grpc {
                    option 'lite'
                }
            }
        }
    }
}

dependencies {
    protobuf files('../protos')
    implementation 'io.grpc:grpc-protobuf-lite:1.25.0'
    implementation 'io.grpc:grpc-okhttp:1.25.0'
    implementation 'io.grpc:grpc-stub:1.25.0'
    implementation 'javax.annotation:javax.annotation-api:1.3.2'
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"

    protobuf 'com.google.api.grpc:proto-google-common-protos:1.18.0'
}
    implementation ('backend1-client'){
        exclude group: 'com.google.grpc', module: 'proto-google-common-protos'
    }

    implementation 'backend2-client'
我尝试了很多排除组组合,但都不起作用

我现在尝试从generateProtoTasks中排除google文件。有没有办法做到这一点

编辑1:问题不在protos中。我认为问题在于,两个后端的proto共享一些导入(例如import“google/api/annotations.proto”),然后生成重复的类


更新:我将所有的协议加入到一个回购协议中,并在那里生成了客户。这似乎奏效了。我可以在我的android应用程序中导入此回购协议而不会出现问题。我之所以能够这样做,是因为我拥有两个后端的所有权

两种解决方案要么在同一导入下组合代码,要么像这样忽略Gradle中的类(我不确定从
.proto
文件生成的代码是如何产生问题的):


你定义了那个类吗?如果在一个客户端和选项中重命名它是这样的话?不,两个后端的proto具有相同的导入,例如导入“google/api/annotation.proto”。我认为这些共享导入产生了这个问题,在相同的导入下组合客户端怎么样?如果这不实用,那么使用Gradle忽略它们呢?(不能在这里添加代码,作为答案发布)。我不明白。你是说我应该在一个地方加入所有的原始人?这是我正在评估的一个选项,但我想把它们分开。关于忽略使用gradle,我想知道如何做到,我无法做到yetYes,我正在考虑将它们结合在一起。我正在处理在模块jetified-ads-cads-client-0.0.2-alpha-runtime.jar(com.tfg.libs:ads-cads-client:0.0.2-alpha)中发现的相同错误复制类com.google.type.TimeZoneOrBuilder和jetified-ads-exchange-client-0.0.2-alpha-runtime.jar(com.tfg.libs:ads-exchange-client:0.0.2-alpha)这更像是一个指针,而不是一个解决方案,因为我不知道该类位于何处。尝试了很多事情都没有成功。我用所有的协议创建了一个新的回购协议,并在那里生成了客户机。这似乎奏效了。但这对我来说不是最好的解决办法