问题描述
我有一个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')
}
}