Gradle 为什么要包含一个特定的jar文件?

Gradle 为什么要包含一个特定的jar文件?,gradle,Gradle,我有一个使用gradle和mavenCentral()(加上mavenLocal())的项目。它有足够多的依赖性,我无法逐一检查它们 给定build/install/x/lib中一个.jar文件的名称,我如何找到导致它被包括在内的可传递依赖链 更新:我发现了gradle依赖项。输出显示: org.apache.commons:commons-jexl:2.1.1 \---- commons-logging:commons-logging:1.1.1 -> 1.1.3 这是什么意思?

我有一个使用gradle和
mavenCentral()
(加上
mavenLocal()
)的项目。它有足够多的依赖性,我无法逐一检查它们

给定
build/install/x/lib
中一个.jar文件的名称,我如何找到导致它被包括在内的可传递依赖链

更新:我发现了
gradle依赖项
。输出显示:

org.apache.commons:commons-jexl:2.1.1
   \---- commons-logging:commons-logging:1.1.1 -> 1.1.3
这是什么意思?1.1.1是我期望的版本,1.1.3是我最终实际使用的版本。看起来它确实列出了日志记录:1.1.1作为一项要求。发生什么事?我有没有办法告诉它避免某些版本,或者强制它使用它设置的版本


在我的例子中,问题是它包含了一个快照版本,而我宁愿它没有。事实上,我可能希望它只使用我要求的版本号,而不是它能找到的最新版本号。

gradle managed project的依赖项有它们自己的依赖项(它们被称为可传递)。两个不同的依赖项具有相同的(组和模块)依赖项,但版本不同,这可能会发生(并且经常发生)。
commons日志记录就是这种情况:commons日志记录
。在这种情况下,有两个可传递的依赖项,一个版本为
1.1.1
,另一个版本为
1.1.3
。如果两个库都包含在最终工件中,则可能会导致冲突和异常。为了避免这种情况,gradle尝试通过选择(默认情况下)最新版本来解决上述版本解析问题。它由右箭头指示
->
请参阅。您可以从特定依赖项中排除可传递依赖项。手册中的章节可能有用

这是一个很好的总结(有关更详细的演练,请参阅《用户指南》)。另一个依赖项正在强制升级解决方案,但您可能可以使用排除规则或避免该问题。@redtuna,您现在清楚了吗?还是需要任何解释?@Opal我不太清楚。看起来这并不完全是gradle所做的,也许commons jexl maven文件说要使用最新可用的commons日志。现在我还需要成为maven的专家。或者可能是gradle配置的某种东西,我不知道。“事情终究是图灵完成了。”红鲔鱼,请看我的回答。希望能有点帮助。谢谢!有了这个,我就能把事情弄明白了。事实证明,没有依赖项直接请求该数字,但有一个依赖项请求“最高可用数字”,这显示在gradle dependencies输出中。