Gradle如何处理冗余依赖项

时间:2018-02-06 08:38:41

标签: gradle

如果我的build.gradle文件中有两个依赖项,它们引用了组工件,并且这两个组都包含对相同jar文件的引用,Gradle如何处理它们? Gradle是否识别组成组的各个jar文件之间的版本差异,并且仅在编译时选择具有最新版本的jar文件,或者它是否选择了build.gradle文件中最后列出的那个?例如:

dependencies {
   compile group: 'some-sdk-1', name: 'sdk1', version: '2.5'
   compile group: 'some-sdk-2', name: 'sdk2', version: '1.0'
}

在这个例子中,some-sdk-1可能包含一个名为lib1-1.0.jar的jar 在some-sdk-2中,存在相同的库但具有不同的版本。例如lib1-2.0.jar

使用哪个jar文件?

1 个答案:

答案 0 :(得分:0)

这取决于jar文件放在库中的方式(sdk)。

您应该将jar文件作为传递依赖项进行管理 这意味着在与sdk相关的pom文件中你有一个jar文件的依赖项 在这种情况下,您可以check the doc:

  

Gradle提供以下冲突解决策略:

     

最新:使用最新版本的依赖项。这是Gradle的默认策略,只要版本向后兼容,它通常是一个合适的选择。

     

失败:版本冲突导致构建失败。此策略要求在构建脚本中显式解决所有版本冲突。有关如何明确选择特定版本的详细信息,请参阅ResolutionStrategy。

相反,如果你只是将jar放在sdk 而不使用传递依赖(只是里面的jar文件):

  

如果不使用传递依赖关系管理,则不会检测到版本冲突,并且类路径的常常意外顺序将决定依赖关系的哪个版本将获胜。