是否可以使用 Spring 的 Gradle 依赖管理插件设置依赖项的分类器

时间:2021-01-05 16:26:34

标签: spring gradle dependency-management gradle-dependencies

我有一个项目,它在多项目 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 个答案:

答案 0 :(得分:0)

Issue #67 用于依赖管理插件请求此功能。问题是维护者的closed,插件维护者的状态为“拒绝”:

<块引用>

当分类器在 Gradle 中仍然是二等公民时,这是不可能实现的。我不认为这会很快改变(Gradle 3.0 中的情况没有得到改善)所以,有些遗憾,我将关闭它。

该问题的后续对话表明,Gradle 6 中的底层 Gradle 问题仍未解决。

这意味着不仅不能使用 dependencySet 指定分类器,它们也不能使用 dependency 部分中的 dependencyManagement 条目指定:

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 作为组指定具有分类器的依赖项版本。