如何使用带有 Spring 的 Gradle 依赖管理插件的分类器的 dependencyManagement 版本?
Posted
技术标签:
【中文标题】如何使用带有 Spring 的 Gradle 依赖管理插件的分类器的 dependencyManagement 版本?【英文标题】:How can I use a dependencyManagement version with a classifier with Spring's Gradle dependency management plugin? 【发布时间】:2021-04-21 02:36:08 【问题描述】:根据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】:Spring 依赖管理插件通过managedVersions
map 提供对托管版本的编程访问。这可以用来获取工件的依赖版本,可以用来指定要使用的版本:
dependencies
annotationProcessor "com.querydsl:querydsl-apt:$dependencyManagement.managedVersions['com.querydsl:querydsl-apt']:general"
implementation 'com.querydsl:querydsl-mongodb'
【讨论】:
以上是关于如何使用带有 Spring 的 Gradle 依赖管理插件的分类器的 dependencyManagement 版本?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 gradle 中获取 spring-boot 依赖版本?
Gradle:使用 Spring Boot 依赖项构建“fat jar”
带有 Gradle 的 Spring Boot 任务失败:测试?
从 Gradle 中的 Spring Boot 中排除 Tomcat 依赖项