【问题标题】:Gradle: Compile DependenciesGradle:编译依赖
【发布时间】:2015-10-01 19:24:49
【问题描述】:

我在 Spring Boot 中使用 mongodb。最近,我的mongodb升级到了3.0版本。

我正在为 Spring 使用以下 Gradle 依赖项:

buildscript {
    ext {
        springBootVersion = '1.2.6.RELEASE'
    }

dependencies {
    compile 'org.springframework.boot:spring-boot-starter-data-mongodb'
}

如果我查看 Gradle 的 maven 存储库:'org.springframework.boot:spring-boot-starter-data-mongodb:1.2.6.RELEASE',我会看到以下内容 (http://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-mongodb/1.2.6.RELEASE):

“版本”列下的 mongo-java-drivers 依赖项是 2.12.5。我想知道“更新”列的用途是什么,我怎样才能使用那里列出的 mongo-java-drivers 版本(3.0.4)?

由于我使用的是 mongo 3.0,我想使用 3.0.4 java-drivers 而不是 2.12.5,因为我需要将 java-drivers 更新为至少 2.13,然后它们才能与我的 mongodb 3.0 一起使用:http://docs.mongodb.org/manual/release-notes/3.0-scram/#upgrade-drivers

【问题讨论】:

    标签: spring mongodb gradle spring-boot


    【解决方案1】:

    只需将以下依赖项添加到您的项目依赖项中:

    compile 'org.mongodb:mongo-java-driver:3.0.4'

    这会将 mongodb Java 驱动程序显式设置为最新版本,并将超出 spring-boot-starter-data-mongodb 的传递依赖版本。

    顺便说一句,“更新”列表示特定工件的最新版本。

    【讨论】:

    • 谢谢 orid - 我昨晚测试了这个,它似乎在它经过身份验证时工作,但它给了我一些我正在尝试修复的随机错误。一旦我花更多时间在这件事上,我会回复你的。
    • 谢谢。我尝试了您的解决方案并且它有效。我想知道覆盖传递依赖是否安全?如果版本列在更新栏下,是否意味着可以安全使用?
    • 它是安全的,但有时向后兼容性可能会中断
    【解决方案2】:

    您可以通过在 pom.xml 中显式添加要使用的依赖项版本来强制使用较新版本的依赖项。 然后Maven会使用明确指定的版本进行编译。

    仅供参考,您可以使用 exclude 元素排除由直接依赖项触发的依赖项。

    请参阅this doc 了解 maven 如何管理依赖项。

    如果您使用的是 Gradle,请参阅 this page。事实上,你排除了 Spring Boot 触发的 MongoDB 传递依赖,并显式添加了最新版本作为直接依赖。

    【讨论】:

    • 您好,抱歉 - 我认为我的问题没有正确表达自己。我稍微编辑了一下。我使用 gradle 作为我的内置引擎,而不是 maven。我只查找了 maven 存储库上的编译依赖项,因为这是我知道如何识别 springboot mongodb 包中使用的依赖项的唯一方法。您能否给我一个 gradle 代码示例,说明如何强制 gradle 采用较新版本的依赖项?
    • @Simon 我刚刚为 Gradle 添加了一个页面链接,试试看它是否有效:)
    猜你喜欢
    • 1970-01-01
    • 2014-04-05
    • 1970-01-01
    • 2014-10-07
    • 2014-04-14
    • 2016-09-16
    • 2014-07-17
    • 2015-03-12
    • 1970-01-01
    相关资源
    最近更新 更多