spring-boot - 无法在 gradle 5 中使用带有 annotationProcessor 配置的 Maven BOM
问题描述
我正在尝试将 maven BOM 与 gradle 5.1.1 一起使用,如下所述
ext {
set('spring-boot-dependencies.version', '2.1.2.RELEASE')
}
apply plugin: 'java'
group 'com.acme'
version '1.0.0-SNAPSHOT'
sourceCompatibility = 1.8
repositories {
mavenCentral()
jcenter()
}
dependencies {
// maven bom
implementation platform("org.springframework.boot:spring-boot-dependencies:${project.'spring-boot-dependencies.version'}")
compileOnly('org.projectlombok:lombok')
annotationProcessor('org.projectlombok:lombok')
}
当我运行./gradlew dependencies --configuration=annotationProcessor
&./gradlew dependencies --configuration=compileOnly
时,我分别得到以下
annotationProcessor - Annotation processors and their dependencies for source set 'main'.
\--- org.projectlombok:lombok FAILED
compileOnly - Compile only dependencies for source set 'main'.
+--- org.projectlombok:lombok FAILED
奇怪的是,IntelliJcompileOnly
正确地解决了依赖关系,但不是annotationProcessor
我对发生了什么感到很困惑。任何帮助表示赞赏
解决方案
在 Gradle 中,平台与常规依赖项一样,仅限于给定配置(以及扩展它的配置)。
在您的示例中,BOM 仅用于implementation
,因此只会为该配置和扩展它的配置提供建议,例如compileClasspath
or runtimeClasspath
。
为了解决您的问题,您需要将 BOM 声明给您希望从其推荐版本中受益的所有配置。
您可以通过重复声明来实现这一点:
compileOnly platform("org.springframework.boot:spring-boot-dependencies:${project.'spring-boot-dependencies.version'}")
annotationProcessor platform("org.springframework.boot:spring-boot-dependencies:${project.'spring-boot-dependencies.version'}")
或者您可以创建一个专用配置并使所有需要约束的配置扩展它:
configurations {
springBom
compileOnly.extendsFrom(springBom)
annotationProcessor.extendsFrom(springBom)
implementation.extendsFrom(springBom)
}
dependencies {
springBom platform("org.springframework.boot:spring-boot-dependencies:${project.'spring-boot-dependencies.version'}")
}
推荐阅读
- flutter - 在 Flutter 中使用 TextField 时出错
- mysql - 如何在视图中插入数据,选择最后插入的 id 并将其插入另一个表
- java - 获取直到第一次出现字符串的子路径
- c# - 第 8 行 EXCEL OLE DB 后无法读取文件
- r - 如何创建非聚集索引以从 R 中的 SQLite DB 查询和收集数据以进行绘图?
- javascript - 将电子表格文件复制到 Google Drive 并将所有公式替换为值
- node.js - Firebase 功能在部署时有效,但在本地无效
- java - 仅在使用 log4j 时记录致命和错误消息
- python - functools.map 替代字典
- python - 使用 asyncio 在一个时间间隔内运行命令并在之后终止它