Невозможно использовать спецификацию Maven в Gradle 5 с конфигурацией annotationProcessor - PullRequest
0 голосов
/ 05 февраля 2019

Я пытаюсь использовать 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 Ответ

0 голосов
/ 06 февраля 2019

В Gradle платформа, как и обычные зависимости, ограничена определенной конфигурацией (и конфигурациями, расширяющими ее).

В вашем примере спецификация используется только в implementation и, таким образом, будет толькопредоставьте рекомендации для этой конфигурации и тех, которые ее расширяют, например compileClasspath или runtimeClasspath.

. Чтобы решить вашу проблему, вам необходимо объявить спецификацию для всех конфигураций, для которых вы хотите получить выгоду.его рекомендуемые версии.

Вы можете достичь этого, повторив объявление:

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'}")
}
...