代码之家  ›  专栏  ›  技术社区  ›  Ashok Koyi

无法将5级中的Maven BOM与AnnotationProcessor配置一起使用

  •  0
  • Ashok Koyi  · 技术社区  · 7 年前

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

    奇怪的是,Intellij解决了 compileOnly 依赖关系正确,但不是 annotationProcessor

    我对正在发生的事情很困惑。谢谢你的帮助

    intellij gradle view

    1 回复  |  直到 7 年前
        1
  •  1
  •   Louis Jacomet    7 年前

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

    在您的示例中,BOM仅用于 implementation 因此,将只为这种配置和扩展它的配置提供建议,比如 compileClasspath 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'}")
    }
    
    推荐文章