为什么包含特定的jar文件?

时间:2015-08-11 23:17:07

标签: gradle

我有一个使用gradle和mavenCentral()(加mavenLocal())的项目。它有足够的依赖关系,我不能一个接一个地通过它们。

鉴于build/install/x/lib中.jar文件的名称,如何找出导致其被包含的传递依赖链?

更新:我发现了gradle dependencies。输出显示:

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看起来确实列出了日志:1.1.1作为要求。这是怎么回事?有没有办法让我告诉它避免某些版本,或强制它使用它设置的版本?

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

1 个答案:

答案 0 :(得分:2)

gradle-managed项目的依赖关系有自己的依赖关系(它们被称为 transitive )。它可能发生(并经常发生)两个不同的依赖关系具有相同的(组和模块)依赖关系,但在不同的版本中)。这是commons-logging:commons-logging的情况。在这种情况下,有两个传递依赖关系,一个版本为1.1.1,第二个版本为1.1.3。如果两个库都包含在最终工件中,则可能导致冲突和异常。为了防止这种情况,gradle尝试通过选择(默认情况下)最新的版本来解决上述版本解析问题。用右箭头->表示here。您可以从特定依赖项中排除传递依赖项。手册的This章可能有用。