Gradle瞬态依赖解决方案:一般来说,如何更喜欢“guava jre”而不是“guava android”?

Gradle瞬态依赖解决方案:一般来说,如何更喜欢“guava jre”而不是“guava android”?,gradle,guava,Gradle,Guava,我的项目依赖于Google Guava lib。突然(使用新版本的Guava?)应用程序在启动时崩溃 java.lang.NoSuchMethodError:'java.util.stream.Collector com.google.common.collect.ImmutableList.toImmutableList()' 在番石榴29.0中,这种方法是,但是。不幸的是,Gradle的依赖解析选择了29.0-android 在第一次尝试中,我在build.gradle中修复了它,如下所示:

我的项目依赖于Google Guava lib。突然(使用新版本的Guava?)应用程序在启动时崩溃
java.lang.NoSuchMethodError:'java.util.stream.Collector com.google.common.collect.ImmutableList.toImmutableList()'

在番石榴29.0中,这种方法是,但是。不幸的是,Gradle的依赖解析选择了
29.0-android

在第一次尝试中,我在
build.gradle
中修复了它,如下所示:

configurations.all {
  resolutionStrategy.dependencySubstitution {
    // Because of java.lang.NoSuchMethodError: 'java.util.stream.Collector com.google.common.collect.ImmutableList.toImmutableList()'
    substitute module('com.google.guava:guava:29.0-android') with module('com.google.guava:guava:29.0-jre')
  }
}

有没有更通用的方法来解决这个问题?如果下一个Guava版本
30.0-android/-jre
出现,我的解决方案必须再次修复。

直到合并后Guava发布Gradle元数据,我非常期待,你可以使用jjohannes。它将追溯性地向Gradle中的Guava模块元数据添加变体和功能。与一些解决规则一起,这确保了即使依赖项可传递地请求(更新的)android版本,也会选择jre变体。

有关guava lib的此已知问题的链接:。我认为,除了声明自己依赖于
-jre
版本并在构建脚本中强制使用此模块之外,您没有更好的选择了,如下所述:是的:(总有一天我们需要研究,这会让Gradle用户受益匪浅。感谢您发布链接。