Skip to content

依赖约束

依赖约束(Dependency Constraints)允许你对依赖的版本进行限制,而无需直接引入该依赖。常用于管理传递依赖的版本。

基本用法

kotlin
dependencies {
    constraints {
        // 约束传递依赖的版本
        implementation("com.google.guava:guava:32.0.1-jre") {
            because("修复安全漏洞 CVE-2023-2976")
        }
        
        // 约束所有配置
        api("org.slf4j:slf4j-api:2.0.9")
    }
    
    // 直接依赖(版本由约束管理)
    implementation("com.example:A:1.0")  // A 的传递依赖 guava 会被约束到 32.0.1
}

约束 vs 强制

kotlin
// 约束:推荐版本,但高版本可以覆盖
constraints {
    implementation("com.google.guava:guava:32.0.1-jre")
}

// 强制:严格版本,不可被覆盖
dependencies {
    implementation("com.google.guava:guava") {
        version { strictly("32.0.1-jre") }
    }
}

拒绝特定版本

kotlin
dependencies {
    constraints {
        implementation("com.example:lib") {
            version {
                rejectAll()
                prefer("2.0.0")
                reject("1.0.0", "1.1.0")  // 拒绝已知有问题的版本
            }
        }
    }
}

在 BOM 风格项目中使用约束

kotlin
// java-platform 插件的 BOM 项目
plugins {
    `java-platform`
}

dependencies {
    constraints {
        api("com.google.guava:guava:32.0.1-jre")
        api("org.slf4j:slf4j-api:2.0.9")
        runtime("ch.qos.logback:logback-classic:1.4.11")
    }
}

下一步