如何排除 gradle 依赖项

how to exclude gradle dependencies

我目前有一个项目,我对其执行了 aqua 扫描,它确定了 jackson-databind-2.9。8.jar我目前正在使用它作为一个严重漏洞,并建议我更换与版本 2.10。为了更新它,同时确保所有其他 dependencies/code 正常工作,我在我的 build.gradle 文件中尝试了以下代码,其中 group_name:microservice -event:0.2.+ 出现在 gradle 依赖项列表中,并且显然引入了导致问题的 2.9.8 jar:

    implementation 'com.fasterxml.jackson.core:jackson-databind:2.10'

    implementation('*group_name*:microservice-event:0.2.+') {
        exclude group: 'com.fasterxml.jackson.core', module: 'jackson-databind'
    }

我还删除了我之前在 build.gradle 文件中的 implementation '*group_name*:microservice-event:0.2.+' 行。

但是,现在项目构建失败,我不知道为什么。有谁知道如何在 build.gradle 文件中编写代码以成功排除旧的 jars/dependencies,同时允许较新的 jar(正如我尝试对行 implementation 'com.fasterxml.jackson.core:jackson-databind:2.10' 所做的那样)。请注意,我不想更新 spring 引导版本。

当Gradle遇到同一个依赖的两个不同版本时,会进行冲突解决。默认选择最高版本号。

但是,由于像 Jackson 这样的许多库都由许多单独的模块组成,例如 jackson-databindjackson-core,您最终可能会遇到不同版本之间不匹配的情况。

要对齐它们,您可以使用 Jackson BOM 和 Gradle 的 platform dependency 机制。它看起来像这样(只选择下面的依赖项之一):

dependencies {
  // Enforce the specified version
  implementation(enforcedPlatform("com.fasterxml.jackson:jackson-bom:2.10.4"))

  // Align all modules to the same version, but allow upgrade to a higher version
  implementation(platform("com.fasterxml.jackson:jackson-bom:2.10.4"))
}

您不需要从其他依赖项中排除任何内容。

如果您在升级后使用 Jackson 时遇到问题,您应该查看 release notes for 2.10 并检查您是否会受到任何兼容性更改的影响。当然,如果问题出在第三方库中,可能更难解决。不过你可以试试2.9行的最新版本(此时是2.9.10),看看这里的漏洞是否修复了。