如何覆盖gradle Java平台模块中的事务依赖关系?

tjvv9vkg  于 2022-12-25  发布在  Java
关注(0)|答案(1)|浏览(123)

我正在使用Gradle Java Platfom插件,如下所示

plugins {
    `java-platform`
}

javaPlatform {
    allowDependencies()
}

dependencies {
    api(platform("org.springframework.boot:spring-boot-dependencies:2.7.7"))
}

我想替代BOM表将引入的从属关系版本。例如,将BOM表选择的 spring security 版本从5.7更改为5.8。
这似乎行得通

plugins {
   `java-platform`
}

javaPlatform {
   allowDependencies()
}

dependencies {
   api(platform("org.springframework.boot:spring-boot-dependencies:2.7.7"))
}
constraints {      
       api(group="org.springframework.security",name="spring-security-web") {
           version {
               require("5.8.1")
           }
       }

       api(group="org.springframework.security",name="spring-security-config") {
           version {
               require("5.8.1")
           }
       }
}

我必须在Spring Security中的每个jar文件上设置一个约束。我想为同一组中的所有jar设置相同的版本。我的问题:

  • 从BOM表中替代从属关系的正确方法是什么?
  • 是否有办法覆盖一个组而不是一个特定jar的依赖版本?如果有,如何覆盖?
sd2nnvve

sd2nnvve1#

在Spring Security示例中,it has a BOM可在Java平台中定义。

plugins {
  `java-platform`
}

javaPlatform {
  allowDependencies()
}

dependencies {
  api(platform("org.springframework.boot:spring-boot-dependencies:2.7.7"))

  // import the Spring Security BOM
  api(platform("org.springframework.security:spring-security-bom:5.8.1"))
}

如果没有发布的BOM,则可以在Gradle中使用依赖关系版本对齐规则定义您自己的BOM。

// build.gradle.kts

// Create a rule that defines a 'virtual platform'
abstract class SpringSecurityAlignmentRule: ComponentMetadataRule {
  override fun execute(ctx: ComponentMetadataContext) {
    ctx.details.run {
      if (id.group.startsWith("org.springframework.security")) {
        // declare that Spring Security modules all belong to the Spring Security virtual platform
        belongsTo("org.springframework.security:spring-security-virtual-platform:${id.version}")
      }
    }
  }
}

dependencies {
  // apply the rule
  components.all<SpringSecurityAlignmentRule>()    
  // set the virtual Spring Security platform to 5.8.1
  implementation(platform("org.springframework.security:spring-security-virtual-platform:5.8.1"))
}

相关问题