8

我正在尝试将 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

我对发生了什么感到很困惑。任何帮助表示赞赏

intellij gradle 视图

4

1 回答 1

19

在 Gradle 中,平台与常规依赖项一样,仅限于给定配置(以及扩展它的配置)。

在您的示例中,BOM 仅用于implementation,因此只会为该配置和扩展它的配置提供建议,例如compileClasspathor 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'}")
}
于 2019-02-06T10:57:24.613 回答