父模块中的Gradle依赖平台

问题描述

我有一个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')
    }
}