在模块 guava-20.0.jar (com.google.guava:guava:20.0) 中发现重复 class com.google.common.util.concurrent.ListenableFuture
Duplicate class com.google.common.util.concurrent.ListenableFuture found in modules guava-20.0.jar (com.google.guava:guava:20.0)
当我在 app/build.gradle
中使用 implementation 'com.google.firebase:firebase-inappmessaging-display:17.2.0'
时,出现此错误:
Duplicate class com.google.common.util.concurrent.ListenableFuture found in modules guava-20.0.jar (com.google.guava:guava:20.0) and listenablefuture-1.0.jar (com.google.guava:listenablefuture:1.0)
Go to the documentation to learn how to Fix dependency resolution errors.
我的 app/build.gradle
中还有这个:
implementation 'com.google.android.gms:play-services-base:16.1.0'
implementation 'com.google.android.gms:play-services-analytics:16.0.8'
implementation 'com.google.android.gms:play-services-awareness:16.0.0'
implementation 'com.google.android.gms:play-services-cast:16.2.0'
implementation 'com.google.android.gms:play-services-gcm:16.1.0'
implementation 'com.google.android.gms:play-services-location:16.0.0'
implementation 'com.google.android.gms:play-services-maps:16.1.0'
implementation 'com.google.firebase:firebase-core:16.0.8'
implementation 'com.google.firebase:firebase-iid:17.1.2'
implementation 'com.google.firebase:firebase-messaging:17.6.0'
implementation 'android.arch.work:work-runtime:1.0.1'
implementation 'com.android.support:multidex:1.0.3'
apply plugin: 'com.google.gms.google-services'
也许我正在使用的库之一已经包含对应用内消息依赖项的支持,然后它就变得多余了?谢谢。
我在 找到了解决方案。 user2297550 说:
I merely added implementation 'com.google.guava:guava:27.0.1-android'
at the end of my app gradle file and the error went away.
这就是我的解决方案。现在我有了这个并且我的应用程序可以正确编译:
implementation 'com.google.firebase:firebase-inappmessaging-display:17.2.0'
implementation 'com.google.guava:guava:27.0.1-android'
减少项目中的重复依赖项
例如,许多依赖项使用 support-v4 和 appcompat-v7 作为包含包,然后可能是不同的版本,因此您需要从依赖项内部删除这些包并创建一个编译依赖项。
这将删除所有包含的库模块
android {
configurations {
all*.exclude module: 'appcompat-v7'
all*.exclude module: 'support-v4'
}
}
或者您可以像这样管理抛出每个依赖关系以更清楚地删除包:
dependencies {
implementation ('com.mapbox.mapboxsdk:mapbox-android-sdk:4.2.0@aar') {//depend on your library
transitive = true
exclude group: 'com.android.support', module: 'appcompat-v7'
exclude group: 'com.android.support', module: 'recyclerview-v7'
exclude group: 'com.android.support', module: 'design'
exclude group: 'com.android.support', module: 'support-v4'
exclude group: 'com.squareup.retrofit2' module: 'retrofit'
exclude group: 'com.squareup.retrofit2', module: 'retrofit'
exclude group: 'com.google.code.gson', module: 'gson'
exclude module: 'guava'//add this line if you have build error "found in modules guava-xxx-android.jar"
}
}
所有已删除的依赖项必须在 mapbox 外部以一份副本声明,以便所有库使用它们。
在 build.gradle 中添加这一行
implementation 'com.google.guava:guava:27.0.1-android'
2020年解决方案
Google 知道这个错误所以他们制作了一个特殊的包来修复冲突。
将此添加到您的 build.gradle
implementation 'com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava'
我遇到了同样的问题。我在下面添加了行
implementation 'com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava'
这有效,但我遇到了另一个问题 - Cannot fit requested classes in a single dex file (# methods: 89411 > 65536)
要解决此错误,请确保启用 multiDex,如下所示
defaultConfig {
applicationId "com.techweezy.smartsync"
minSdkVersion 19
targetSdkVersion 29
versionCode 5
versionName "1.4"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
multiDexEnabled true //added this line
}
然后最后添加下面几行。
implementation 'com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava'
implementation 'androidx.multidex:multidex:2.0.1'
打开 build.gradle
文件。
不替换!只需将此行添加到 dependencies{}
:
implementation 'com.google.guava:guava:<version>-jre'
Note: To get the version go to https://mvnrepository.com/artifact/com.google.guava/guava and find for the latest version of jre
.
我刚刚在构建我的 Flutter 项目时遇到了这个问题。不太清楚为什么它会抬起丑陋的脑袋,但我在这里。
因此,如果任何 Flutter 开发人员遇到此问题,@Ray Li 的回答对我有用。您要编辑的 build.gradle
文件是 android/app
文件夹中的文件(即不是 android
文件夹中的文件)。
只需要在文件末尾的dependencies部分添加implementation 'com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava'
,如下:
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation 'com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava'
}
将此添加到您的 gradle 文件
configurations {
all*.exclude group: 'com.google.guava', module: 'listenablefuture'
}
将这两个实现添加到您的应用级别 build.gradle / app/build。gradle
implementation 'com.google.firebase:firebase-inappmessaging-display:17.2.0'
implementation 'com.google.guava:guava:27.0.1-android'
我添加了这个并且非常适合我。
implementation 'com.google.guava:guava:27.0.1-android'
当我在 app/build.gradle
中使用 implementation 'com.google.firebase:firebase-inappmessaging-display:17.2.0'
时,出现此错误:
Duplicate class com.google.common.util.concurrent.ListenableFuture found in modules guava-20.0.jar (com.google.guava:guava:20.0) and listenablefuture-1.0.jar (com.google.guava:listenablefuture:1.0)
Go to the documentation to learn how to Fix dependency resolution errors.
我的 app/build.gradle
中还有这个:
implementation 'com.google.android.gms:play-services-base:16.1.0'
implementation 'com.google.android.gms:play-services-analytics:16.0.8'
implementation 'com.google.android.gms:play-services-awareness:16.0.0'
implementation 'com.google.android.gms:play-services-cast:16.2.0'
implementation 'com.google.android.gms:play-services-gcm:16.1.0'
implementation 'com.google.android.gms:play-services-location:16.0.0'
implementation 'com.google.android.gms:play-services-maps:16.1.0'
implementation 'com.google.firebase:firebase-core:16.0.8'
implementation 'com.google.firebase:firebase-iid:17.1.2'
implementation 'com.google.firebase:firebase-messaging:17.6.0'
implementation 'android.arch.work:work-runtime:1.0.1'
implementation 'com.android.support:multidex:1.0.3'
apply plugin: 'com.google.gms.google-services'
也许我正在使用的库之一已经包含对应用内消息依赖项的支持,然后它就变得多余了?谢谢。
我在
I merely added
implementation 'com.google.guava:guava:27.0.1-android'
at the end of my app gradle file and the error went away.
这就是我的解决方案。现在我有了这个并且我的应用程序可以正确编译:
implementation 'com.google.firebase:firebase-inappmessaging-display:17.2.0'
implementation 'com.google.guava:guava:27.0.1-android'
减少项目中的重复依赖项
例如,许多依赖项使用 support-v4 和 appcompat-v7 作为包含包,然后可能是不同的版本,因此您需要从依赖项内部删除这些包并创建一个编译依赖项。
这将删除所有包含的库模块
android {
configurations {
all*.exclude module: 'appcompat-v7'
all*.exclude module: 'support-v4'
}
}
或者您可以像这样管理抛出每个依赖关系以更清楚地删除包:
dependencies {
implementation ('com.mapbox.mapboxsdk:mapbox-android-sdk:4.2.0@aar') {//depend on your library
transitive = true
exclude group: 'com.android.support', module: 'appcompat-v7'
exclude group: 'com.android.support', module: 'recyclerview-v7'
exclude group: 'com.android.support', module: 'design'
exclude group: 'com.android.support', module: 'support-v4'
exclude group: 'com.squareup.retrofit2' module: 'retrofit'
exclude group: 'com.squareup.retrofit2', module: 'retrofit'
exclude group: 'com.google.code.gson', module: 'gson'
exclude module: 'guava'//add this line if you have build error "found in modules guava-xxx-android.jar"
}
}
所有已删除的依赖项必须在 mapbox 外部以一份副本声明,以便所有库使用它们。
在 build.gradle 中添加这一行
implementation 'com.google.guava:guava:27.0.1-android'
2020年解决方案
Google 知道这个错误所以他们制作了一个特殊的包来修复冲突。
将此添加到您的 build.gradle
implementation 'com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava'
我遇到了同样的问题。我在下面添加了行
implementation 'com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava'
这有效,但我遇到了另一个问题 - Cannot fit requested classes in a single dex file (# methods: 89411 > 65536)
要解决此错误,请确保启用 multiDex,如下所示
defaultConfig {
applicationId "com.techweezy.smartsync"
minSdkVersion 19
targetSdkVersion 29
versionCode 5
versionName "1.4"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
multiDexEnabled true //added this line
}
然后最后添加下面几行。
implementation 'com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava'
implementation 'androidx.multidex:multidex:2.0.1'
打开
build.gradle
文件。不替换!只需将此行添加到
dependencies{}
:implementation 'com.google.guava:guava:<version>-jre'
Note: To get the version go to https://mvnrepository.com/artifact/com.google.guava/guava and find for the latest version of
jre
.
我刚刚在构建我的 Flutter 项目时遇到了这个问题。不太清楚为什么它会抬起丑陋的脑袋,但我在这里。
因此,如果任何 Flutter 开发人员遇到此问题,@Ray Li 的回答对我有用。您要编辑的 build.gradle
文件是 android/app
文件夹中的文件(即不是 android
文件夹中的文件)。
只需要在文件末尾的dependencies部分添加implementation 'com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava'
,如下:
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation 'com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava'
}
将此添加到您的 gradle 文件
configurations {
all*.exclude group: 'com.google.guava', module: 'listenablefuture'
}
将这两个实现添加到您的应用级别 build.gradle / app/build。gradle
implementation 'com.google.firebase:firebase-inappmessaging-display:17.2.0'
implementation 'com.google.guava:guava:27.0.1-android'
我添加了这个并且非常适合我。
implementation 'com.google.guava:guava:27.0.1-android'