Java 重复类com.google.api.Advice
我有两个后端支持grpc通信 对于其中的每一个,我都创建了一个简单的android项目,其中包含build.gradleJava 重复类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
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)这更像是一个指针,而不是一个解决方案,因为我不知道该类位于何处。尝试了很多事情都没有成功。我用所有的协议创建了一个新的回购协议,并在那里生成了客户机。这似乎奏效了。但这对我来说不是最好的解决办法