Как поддержка импорта Gradle BOM разрешает версию зависимости, добавляемую в плагин динамически? - PullRequest
0 голосов
/ 27 февраля 2020

Я использую Spring Boot и Плагин управления зависимостями Spring Boot , который помогает мне использовать зависимости от Spring Boot BOM. Однако Поддержка Gradle для импорта спецификации , начиная с версии 5.0. Я принял решение перейти на Поддержка импорта встроенной спецификации Gradle . Но я сталкиваюсь с проблемой: я использую пользовательский плагин Gradle с динамически добавленной зависимостью:

open class MyCustomPlugin : Plugin<Project> {
    override fun apply(project: Project): Unit = project.run {
        project.dependencies.add("jooqRuntime", "org.postgresql:postgresql")
    }
}

Этот плагин зависит от другого плагина

dependencies {
implementation("nu.studer:gradle-jooq-plugin:4.1")}

Таким образом, я могу получить версию PostgreSQL из этого плагина. Теперь я не могу сделать то же самое. Как я могу разрешить зависимость, добавленную в плагин динамически?

1 Ответ

1 голос
/ 27 февраля 2020

Плагин Spring для управления зависимостями немного сложен. Он касается всех конфигураций, как вы можете видеть здесь с использованием вызова all().

Собственное решение Gradle оптимизировано или «умнее» и касается только "конфигурации, в которых это необходимо. Вы можете узнать больше о различиях в этом разговоре.

Таким образом, решение здесь состоит в том, чтобы импортировать спецификацию или платформу, как Gradle вызывает ее для конфигурации jooqRuntime. Это можно сделать либо в вашем проекте:

dependencies {
    "jooqRuntime"(platform("org.springframework.boot:spring-boot-dependencies:2.2.5.RELEASE")
}

, либо непосредственно в плагине (пример Java):

public class MyCustomPlugin implements Plugin<Project> {

    @Override
    public void execute(Project project) {
        DependencyHandler dependencies = project.getDependencies();
        dependencies.add("jooqRuntime", dependencies.platform("org.springframework.boot:spring-boot-dependencies:2.2.5.RELEASE"));
    }

}
...