Gradle:如何显示依赖冲突的来源

38

我有一个Gradle项目,其中有许多依赖项,其中一个依赖项的解析如下:

gradle dependencyInsight --configuration compile --dependency javax.activation

:dependencyInsight
javax.activation:activation:1.1 (conflict resolution)
+--- com.sun.mail:mailapi:1.4.4
|    \--- compile
\--- com.sun.mail:smtp:1.4.4
     \--- compile

javax.activation:activation:1.0.2 -> 1.1
\--- compile

因为我明确指定了1.0.2版本,所以1.1版本必须是一个传递依赖项。我该如何找出这个特定的传递依赖项来自哪里?

1个回答

31

回答这个问题是 dependencyInsight 任务的全部意义。 javax.activation:activation:1.1 是由 com.sun.mail:mailapi:1.4.4com.sun.mail:smtp:1.4.4 引入的。

如果你的代码也依赖于 javax.activation,你可以使用 compile("javax.activation:activation:1.0.2") { force = true } 强制使用你指定的版本。如果不是,你可以使用 configurations.all { resolutionStrategy.force "javax.activation:activation:1.0.2" } 强制使用指定的版本。


是的,我没有意识到。有没有一种方法可以一次显示所有已解决的冲突? - Giovanni Botta
4
如果使用configurations.all { resulutionStrategy.failOnVersionConflict() },Gradle会强制您在构建脚本中明确解决所有版本冲突。 - Peter Niederwieser
通过 gradle dependencies 命令可以获取一些信息。如果您需要更多信息,则可以使用 gradle dependencyInsight 命令(针对特定依赖项)。 - Peter Niederwieser
2
+1. 完整的示例在此处:https://www.devsbedevin.net/android-understanding-gradle-dependencies-and-resolving-conflicts/ - Vaiden

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