如何在gradle中强制使用传递依赖项(netty-codec-http)的特定版本?

How to force specific version of a transitive dependency (netty-codec-http) in gradle?

提问人:Muhammad Towfique Imam 提问时间:10/17/2023 更新时间:10/18/2023 访问量:152

问:

我正在尝试将版本用于库,因为 OWASP 依赖项检查器将依赖项标记为 .它被亚马逊依赖性拉出来。这是我的文件。我正在使用 gradle 和 .4.1.100.Finalnetty-codec-httpnetty*HIGHs3build.gradle8.3jdk11

plugins {
    id 'java'
    id 'org.springframework.boot' version '2.7.16'
    id 'io.spring.dependency-management' version '1.0.15.RELEASE'
    id "org.owasp.dependencycheck" version "8.2.1"
}

group = 'com.test'
version = '0.0.1-SNAPSHOT'

java {
    sourceCompatibility = '11'
}

repositories {
    mavenCentral()
}

configurations.all {
    resolutionStrategy {
        force 'io.netty:netty-codec-http:4.1.100.Final'
    }
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    implementation platform("software.amazon.awssdk:bom:2.21.0")
    implementation "software.amazon.awssdk:sdk-core"
    implementation "software.amazon.awssdk:s3"
    implementation "software.amazon.awssdk:route53"
    implementation "software.amazon.awssdk:route53resolver"
}

tasks.named('test') {
    useJUnitPlatform()
}

我点击了这个链接在gradle上设置AWS。

依赖项检查器仍显示版本并将其标记为 。我正在使用以下命令生成OWASP报告:4.1.97.FinalHIGH

./gradlew dependencyCheckAnalyze
gradle amazon-s3 dependencies netty owasp

评论


答:

1赞 Vampire 10/18/2023 #1

首先,您应该停止使用 Spring 依赖管理插件。它是 Gradle 没有内置 BOM 支持的时代过时的遗物,甚至它的维护者也建议不要再使用它。到目前为止,它弊大于利,并没有真正产生任何附加值。相反,您应该只使用内置的 BOM 支持,使用 platform(...)。

这很可能也已经解决了您的问题,因为该插件也像您尝试执行的那样执行类似的强制,并且显然会覆盖您强制版本的尝试。

但实际上,你也不应该对版本进行这种大锤子强制,而是应该设置一个严格的版本约束,就像

dependencies {
    constraints {
        implementation("io.netty:netty-codec-http:4.1.100.Final!!")
    }
}