两个依赖项使用相同的库但版本不同

6
似乎我有 Picasso 库 2.4.0 版本,但 Twitter 也使用库的 2.3.2 版本。我的问题是…2.3.2 版本是否会随新版本一起下载?还是只下载了 2.4.0,Twitter 也会使用它?我应该排除 2.3.2 的版本,这样 Twitter 就会自动使用 2.4.0 吗?这样做安全吗?新版本可能与 Twitter 库不兼容,对吗?
在这种情况下我应该如何操作感到困惑。如果可以排除一个库,应该排除哪个库呢?
gradle -q app:dependencyInsight --dependency picasso --configuration compile

com.squareup.picasso:picasso:2.4.0 (conflict resolution)
\--- compile

com.squareup.picasso:picasso:2.3.2 -> 2.4.0
\--- com.twitter.sdk.android:tweet-ui:1.1.0
     +--- compile
     \--- com.twitter.sdk.android:twitter:1.1.1
          \--- compile

(*) - dependencies omitted (listed previously)
1个回答

9
根据Gradle文档
Gradle提供以下冲突解决策略: 最新版本:使用依赖项的最新版本。这是Gradle的默认策略,并且通常是一个适当的选择,只要版本向后兼容即可。 失败:版本冲突导致构建失败。此策略要求在构建脚本中显式解决所有版本冲突。有关如何显式选择特定版本的详细信息,请参见ResolutionStrategy。
因此,Gradle将使用Picasso 2.4.0来管理依赖项。
这会成为问题吗?可能会。如果Twitter使用了从2.3.x到2.4发生变化的方法和/或签名,您将遇到问题。如果它们彼此向后兼容,则不会出现问题。
我现在看到Twitter SDK已经升级了他们的Picasso库到2.5.2(最新版本)。如果你的项目导入了Picasso,那么你也可以更新它(可能应该这样做)。如果它是另一个模块的依赖项,那么你也可以尝试更新该模块。
另一个选项是将Picasso降级到2.3.2或使用ResolutionStrategy来使用较低的版本。除非必须,否则我不建议这样做。

那么...我真的不需要从Twitter中排除2.3.2版本,因为它将被忽略并且不会被下载/处理...我猜测?! - AndreiBogdan
1
@AndreiBogdan. 通常情况下,版本从2.3跳到2.4意味着API发生了重大变化,但如果您不使用Twitter的UI组件,这并不重要,因为它是唯一实际使用Picasso的部分。 - DeeV
谢谢你的帮助。现在这些东西更加清晰了...仍然有一些不是100%清晰,但我会解决的。感谢你指引我正确的方向。 - AndreiBogdan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接