Gradle - spring-security-taglibs:4.0.4.RELEASE在内部下载spring-jdbc-4.2.5.RELEASE

时间:2016-04-08 07:07:26

标签: java spring gradle

在我的项目中,我spring-jdbc:4.1.4.RELEASE工作正常,没有任何问题。现在进行新的更改,我尝试在我的项目中添加spring-security-taglibs:4.0.4.RELEASE,该项目正在尝试下载spring-security-taglibs:4.0.4.RELEASEspring-jdbc-4.2.5.RELEASE,这会在我的项目中造成严重问题。因为我所需的spring-jdbc版本是我明确指定的4.1.4.RELEASE。我怎么能避免这个?背后发生了什么?

这是gradle的奇怪行为

1 个答案:

答案 0 :(得分:1)

您的build.gradle

似乎有类似内容
repositories {
    mavenCentral()
}

dependencies {
    compile 'org.springframework:spring-jdbc:4.1.4.RELEASE'
    compile 'org.springframework.security:spring-security-taglibs:4.0.4.RELEASE'
}

因此,这会在您的依赖项中引入冲突,这在以下任务的输出中是可见的:

gradle dependencyInsight --dependency org.springframework:spring-jdbc

:dependencyInsight
org.springframework:spring-jdbc:4.2.5.RELEASE (conflict resolution)
\--- org.springframework.security:spring-security-acl:4.0.4.RELEASE
     \--- org.springframework.security:spring-security-taglibs:4.0.4.RELEASE
          \--- compile

org.springframework:spring-jdbc:4.1.4.RELEASE -> 4.2.5.RELEASE
\--- compile

上面的箭头( - >)表示使用了gradle默认解析策略,并且gradle选择了4.2.5(最新)。您可以阅读gradle文档:

  

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

     

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

     

失败:版本冲突导致构建失败。此策略要求在构建中显式解决所有版本冲突   脚本。

Link.

我认为您可以选择:

  • 使用最新的spring-jdbc(最好的IMO)
  • 使用较旧的spring security taglibs,它取决于较早的spring-jdbc
  • 解决脚本中的版本冲突(最糟糕的IMO)并保持手指交叉。你至少需要一些运气:-)详情 - here