问题描述
对于 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 的值同步),它也不会特别好用。
尽管有这个限制,还有没有办法使用依赖管理部分中定义的版本?
解决方法
Spring Dependency Management Plugin 通过 managedVersions
map 提供对托管版本的编程访问。这可用于获取工件的依赖版本,可用于指定要使用的版本:
dependencies {
annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.managedVersions['com.querydsl:querydsl-apt']}:general"
implementation 'com.querydsl:querydsl-mongodb'
}