如何使用带有 Spring 的 Gradle 依赖管理插件的分类器的依赖管理版本?

时间:2021-01-16 05:15:59

标签: spring gradle dependency-management gradle-dependencies

对于 dependency-management-plugin#67,不能在 dependencySet 块内指定分类器。相关问题 (Is it possible to set a dependencySet entry's classifier using Spring's Gradle dependency management plugin) 中讨论了此限制。

dependencyManagement {
    dependencies {
        dependencySet(group:'com.querydsl', version: '4.2.2') {
            entry 'querydsl-apt' // This needs to use the "general" classifier
            entry 'querydsl-mongodb'
        }
    }
}

dependencies {
  annotationProcessor 'com.querydsl:querydsl-apt:4.2.2:general' // Version needed to use a classifier
  implementation 'com.querydsl:querydsl-mongodb'
}

解决此限制的一种方法是使用 ext 块,并定义一个版本变量:

ext {
  querydslVersion = 4.2.2
}

dependencyManagement {
    dependencies {
        dependencySet(group:'com.querydsl', version: querydslVersion) {
            entry 'querydsl-mongodb'
        }
    }
}

dependencies {
  annotationProcessor "com.querydsl:querydsl-apt:$querydslVersion:general" // Version needed to use a classifier
  implementation 'com.querydsl:querydsl-mongodb'
}

这种方法的一个缺点是它需要设置一个原本不会设置的属性(并且可能需要在多模块插件中的模块之间可用,从而使构建不那么明显)。如果依赖项版本通过 BOM(例如 imports { mavenBom 'org.springframework.boot:spring-boot-dependencies:2.3.1.RELEASE'},因为这需要手动保持版本与 BOM 的值同步),它也不会特别好用。

尽管有这个限制,还有没有办法使用依赖管理部分中定义的版本?

1 个答案:

答案 0 :(得分:0)

Spring Dependency Management Plugin 通过 managedVersions map 提供对托管版本的编程访问。这可用于获取工件的依赖版本,可用于指定要使用的版本:

dependencies {
  annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.managedVersions['com.querydsl:querydsl-apt']}:general"
  implementation 'com.querydsl:querydsl-mongodb'
}