我有一个使用 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 是我似乎最终实际使用的版本。正在查看the pom for commons-jexl看起来它确实列出了logging:1.1.1作为要求。这是怎么回事?有没有办法让我告诉它避免某些版本,或者强制它使用它设置的版本?
我的情况的问题是它包含 -SNAPSHOT 版本,但我宁愿不包含。事实上,我可能希望它只使用我要求的版本号,而不是它能找到的最新版本号。
最佳答案
gradle 管理的项目的依赖项有自己的依赖项(它们称为传递)。可能会发生(并且经常发生)两个不同的依赖项具有相同的(组和模块)依赖项,但版本不同)。 commons-logging:commons-logging
就是这种情况。在这种情况下,有两个传递依赖项,第一个版本为 1.1.1
,第二个版本为 1.1.3
。如果这两个库都包含在最终工件中,则可能会导致冲突和异常。为了防止这种情况,gradle 尝试通过选择(默认)最新版本来解决提到的版本解析问题。它用右箭头 ->
表示,请参阅 here 。您可以从特定依赖项中排除传递依赖项。 This手册的章节可能有用。
关于gradle - 为什么包含特定的 jar 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31953570/