我可以做一个 Gradle 依赖项的依赖项来强制一个版本吗?

Can i make a Gradle dependencies' dependency to force a version?

是否可以在 Gradle 中强制使用子依赖的版本?

场景: 我们正在使用 Dozer,它的最高版本是 5.5.1,它依赖于 commons-beanutils 1.9.1,不幸的是,我们的 Sonatype CLM/IQ 服务器检测到它有一个安全问题编号 CVE-2014-0114

描述:(Apache Commons BeanUtils,分布于 lib/commons-beanutils-1.8.0.jar in Apache Struts 1.x通过 1.3.10 和在其他需要 commons-beanutils 到 1.9.2 的产品中,不抑制 class 属性,这允许远程攻击者 "manipulate" ClassLoader 并通过class 参数,正如在 Struts 1.)

中将此参数传递给 ActionForm 对象的 getClass 方法所示

是否可以将其依赖版本更新为 1.9.3 以避免出现此安全漏洞?

代码:

dependencies {
  providedCompile(
     <other stuff>
     [group: 'net.sf.dozer', name: 'dozer', version: '5.5.1']
     <other stuff>
  )
}

在你的build.gradle中:

configurations.all {
  resolutionStrategy.eachDependency { DependencyResolveDetails details ->
   if (details.requested.name == 'commons-beanutils') {
      details.useTarget "commons-beanutils:commons-beanutils:1.9.3"
   }
  }
}

传递依赖版本控制解决方案有效,只是您需要为 Sonatype CLM 重建和刷新项目以检测更改。