Gradle 父模块中的依赖平台

Gradle dependency platform in parent module

我有一个包含很多子项目的 gradle 项目,我想要一个 BOM 文件应用于所有子项目。 我试着把它放在一些子项目中并且它工作正常:

dependencies{
  implementation enforcedPlatform('group:bom-artifact:version')
}

但是当我把它作为父级时 gradle.build,或者像这样包装它:

allprojects {
    dependencies {
        implementation enforcedPlatform('group:bom-artifact:version')
    }
}

以错误结束:

> Could not find method implementation() for arguments [DefaultExternalModuleDependency{group='group', name='bom-artifact', version='version', configuration='default'}] on object of type org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler.

不知道哪里出了问题。如何解决这个问题?或者有没有更好的方法将一个 BOM 应用到所有子项目并从一个地方管理它?

我认为问题不在于平台本身

如果您(尚未)应用 Java 插件,通常会出现您收到的消息。

Gradle 的配置范围如实现、api 和 compileOnly 被初始化为 Java 插件初始化阶段的一部分。

因此,根据您的子项目的结构,您可能有一个或多个子项目不使用不识别范围的 Java 插件。我不太确定子项目之间的执行顺序,这可能也有影响。

一个简单的解决方案是将插件也应用到 allprojects 闭包中,例如

allprojects {
    apply plugin: 'java'
    dependencies {
        implementation enforcedPlatform('group:bom-artifact:version')
    }
}