#java #gradle #platform
#java #gradle #Платформа
Вопрос:
У меня есть проект gradle с большим количеством подпроектов, и я хочу, чтобы файл спецификации применялся ко всем подпроектам. Я попытался поместить это в какой-то подпроект, и он работает нормально:
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.
Не могу понять, что не так. Как это исправить? Или есть лучший способ применить одну спецификацию ко всем подпроектам и управлять ею из одного места?
Ответ №1:
Я не думаю, что проблема здесь в самой платформе
Сообщение, которое вы получаете, обычно появляется, если вы (еще) не применили плагин Java.
Области конфигурации Gradle, такие как implementation, api и compileOnly, инициализируются как часть фазы инициализации плагина Java.
Таким образом, в зависимости от структуры вашего подпроекта у вас может быть один или несколько подпроектов, которые не используют плагин Java, который не определяет область действия. Я не совсем уверен в порядке выполнения между подпроектами, это может сыграть свою роль.
Простым решением было бы применить плагин также к закрытию allprojects, например
allprojects {
apply plugin: 'java'
dependencies {
implementation enforcedPlatform('group:bom-artifact:version')
}
}