gradle - 是否可以在整个项目中强制使用特定的库版本?

标签 gradle dependencies snyk

我正在尝试修复 Snyk 工具在我的程序中发现的一些漏洞,但其中一些漏洞来 self 正在使用的库(例如 Apache 的 Pulsar)。 例如,Pulsar 使用的是 gson 2.8.6 版本,根据 Snyk 的说法,该版本存在漏洞,下一个安全版本是 2.8.9。 是否可以强制我使用的所有库都使用 gson 2.8.9 版本(通过 gradle)?或者更确切地说,不是因为这是一个非常愚蠢的想法,容易出现意想不到的行为?

谢谢

最佳答案

这是一件合理的事情。正式支持升级库的新版本 pulsar 会更好,但您通常可以安全地升级传递依赖项。特别是,如果库作者遵循语义版本控制,则点版本(即 2.8.6 -> 2.8.9)可能是安全的。

Gradle 提供了多种方法来做到这一点,目前(从 gradle 7.3 开始)最常用的方法似乎是使用约束。

例如,如果您的依赖项如下所示:

dependencies {
  implementation 'org.apache.pulsar:pulsar-client-all:2.9.1'
}

运行依赖关系洞察将显示我们正在解决 gson 2.8.6

`./gradlew dependencyInsight --dependency gson`


...

com.google.code.gson:gson:2.8.6
\--- org.apache.pulsar:pulsar-package-core:2.9.1
     \--- org.apache.pulsar:pulsar-client-all:2.9.1
          \--- compileClasspath

我们可以添加一个约束,强制它使用这样的较新版本。

dependencies {
  implementation 'org.apache.pulsar:pulsar-client-all:2.9.1'
  constraints {
        implementation('com.google.code.gson:gson:2.8.9') {
            because 'previous versions have a security vulnerability'
        }
  }
}

现在我们得到以下结果

com.google.code.gson:gson:2.8.9
...
   Selection reasons:
      - By constraint : previous versions have a security vulnerability
      - By conflict resolution : between versions 2.8.9 and 2.8.6

com.google.code.gson:gson:2.8.9
\--- compileClasspath

com.google.code.gson:gson:2.8.6 -> 2.8.9
\--- org.apache.pulsar:pulsar-package-core:2.9.1
     \--- org.apache.pulsar:pulsar-client-all:2.9.1
          \--- compileClasspath

现在正在按照您的要求解析 2.8.9。

Gradle 有相当广泛的 documentation关于依赖管理,这是查找有关此类内容的更多信息的好方法。

关于gradle - 是否可以在整个项目中强制使用特定的库版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70592520/

相关文章:

java - Java Gradle API 的 Maven 依赖参数是什么?

windows - 为什么我的应用程序在另一台电脑上启动时崩溃?

java - Mac 上缺少 spring-boot-starter-web hibernate-validator 依赖项

java - 创建一个下载自己的依赖项的 Java 应用程序

javascript - snyk依赖下载问题

jenkins - 如何在 Jenkins 管道中进行 Snyk 代码测试?

groovy - 原因:无此类属性:类org.gradle.api.plugins.Convention的sourceSets

android - 测试中的 Gradle Robolectric 资源 NotFoundException

java - Intellij Idea- Gradle : Execution failed for task ':compileJava'

reporting - Snyk 是否提供开源许可证合规性管理?如果是,是否可以根据所使用的许可证生成报告?