无法在 gradle 5 中使用带有 annotationProcessor 配置的 Maven BOM
Unable to use Maven BOM in gradle 5 with annotationProcessor configuration
我正在尝试将 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
我对发生的事情感到很困惑。感谢任何帮助
在 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'}")
}
我正在尝试将 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
我对发生的事情感到很困惑。感谢任何帮助
在 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'}")
}