是否可以使用 Spring 的 Gradle 依赖管理插件设置 dependencySet 条目的分类器
Posted
技术标签:
【中文标题】是否可以使用 Spring 的 Gradle 依赖管理插件设置 dependencySet 条目的分类器【英文标题】:Is it possible to set a dependencySet entry's classifier using Spring's Gradle dependency management plugin 【发布时间】:2021-04-11 10:22:20 【问题描述】:我有一个项目在多项目 Gradle 构建中使用 Spring Dependency Management Plugin 来为项目指定一致的依赖版本。
根据the documentation,当多个依赖共享同一个组和版本时,应该使用一个依赖集:
当您想为具有相同组和版本的多个模块提供依赖项管理时,您应该使用依赖项集。使用依赖集无需多次指定相同的组和版本,如下例所示:
dependencyManagement dependencies dependencySet(group:'org.slf4j', version: '1.7.7') entry 'slf4j-api' entry 'slf4j-simple'
该项目使用共享组和版本的两个依赖项,但其中一项还指定了一个分类器:
dependencies
annotationProcessor 'com.querydsl:querydsl-apt:4.2.2:general'
implementation 'com.querydsl:querydsl-mongodb:4.2.2'
如果有办法在这种情况下使用dependencySet
,我在文档或在线搜索中没有找到它:
dependencyManagement
dependencies
dependencySet(group:'com.querydsl', version: '4.2.2')
entry 'querydsl-apt' // Can I specify that this uses the "general" classifier?
entry 'querydsl-mongodb'
简而言之,当其中一个依赖项需要分类器时,有没有办法使用dependencySet
,这样做的语法是什么?
【问题讨论】:
【参考方案1】:Issue #67 用于依赖管理插件请求此功能。问题是维护者closed,插件维护者的状态为“拒绝”:
当分类器在 Gradle 中仍然是二等公民时,这是不可能实现的。我不认为这会很快改变(Gradle 3.0 中的情况并没有改善)所以,有些遗憾,我将关闭它。
该问题的后续对话表明,Gradle 6 中的底层 Gradle 问题仍未解决。
这意味着分类器不仅不能使用dependencySet
指定,也不能使用dependencyManagement
部分中的dependency
条目指定:
dependencyManagement
dependencies
dependency 'com.querydsl:querydsl-apt:4.2.2:general' // INVALID
dependency 'com.querydsl:querydsl-mongodb:4.2.2'
更糟糕的是,没有发出警告或失败,因此用户并不清楚它没有使用带有分类器的指定版本。
所以回答这个问题,在dependencyManagement 插件中分类器的使用不受支持,因为Gradle 没有为插件提供访问分类器的API。因此,不能在dependencyManagement
部分中直接使用dependency
或使用dependencySet
作为组来指定带有分类器的依赖版本。
【讨论】:
以上是关于是否可以使用 Spring 的 Gradle 依赖管理插件设置 dependencySet 条目的分类器的主要内容,如果未能解决你的问题,请参考以下文章
Gradle + Spring启动项目:包括外部jar依赖项
Gradle:使用 Spring Boot 依赖项构建“fat jar”
多模块 Spring Boot 项目中的 Gradle 依赖插件