Используйте BOM из управления плагинами Gradle

Мы используем спецификацию, чтобы поделиться нашим управлением зависимостями в MyCompany.

Он определяется как Maven POM. Вот минимальный пример:

<?xml version = "1.0" encoding = "UTF-8"?>
<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.mycompany.common</groupId>
  <artifactId>common-java</artifactId>
  <version>1.0.0</version>
  <packaging>pom</packaging>

  <properties>
    <spring-boot.version>2.4.0</spring-boot.version>
  </properties>

  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-dependencies</artifactId>
        <version>${spring-boot.version}</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
    </dependencies>
  </dependencyManagement>

</project>

Затем он используется в проектах Gradle.

Хотя это работает для зависимостей кода, я хотел бы найти способ использовать его в управлении плагинами.

На данный момент мы определяем в settings.gradle.kts:

pluginManagement {

    val springBootVersion: String by settings

    plugins {
        id("org.springframework.boot") version(springBootVersion)
    }
}

springBootVersion определяется в gradle.properties.

Это проблема для меня, потому что версия Spring определяется как:

  • в общей спецификации;
  • в управлении плагинами каждого проекта.

Как я могу получить доступ к этой спецификации из управления плагинами Gradle? И если я не могу, что является хорошей практикой «не повторять себя», чтобы сделать это?

ждать. если у вас уже есть bom, почему вы не можете добавить свой плагин под build -> pluginManagement -> plugins -> plugin в эту спецификацию и во всех проектах использовать эту композицию в качестве родителя?

Eugene 15.01.2021 23:25

@ Юджин, я не понимаю тебя. Возможно, вы правы, но я не понимаю вашего предложения. Не могли бы вы подробнее рассказать об этом?

Alban Dericbourg 03.02.2021 09:57

извините, я перечитал вопрос и более внимательно рассмотрел, как мы это делаем. и... этим мы тоже не занимаемся из-за этой проблемы. Так что нет, ответ таков, пока это не будет исправлено (что не кажется в ближайшем будущем), вы просто не сможете. Я не думаю, что даже стоит делать это ответом.

Eugene 03.02.2021 15:31
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Версия Java на основе версии загрузки
Версия Java на основе версии загрузки
Если вы зайдете на официальный сайт Spring Boot , там представлен start.spring.io , который упрощает создание проектов Spring Boot, как показано ниже.
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
3
3
772
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ваша пользовательская платформа может предоставить мнение о том, какую версию плагина Spring Boot Gradle вы хотите, чтобы клиенты использовали (тем более, что она не включена в spring-boot-dependencies BOM).

Вот соответствующие части файла build.gradle.kts примера платформы, например:

plugins {
    `java-platform`
}

javaPlatform {
    allowDependencies()
}

dependencies {

    // This platform extends the Spring Boot platform.
    api(platform("org.springframework.boot:spring-boot-dependencies:2.7.6"))

    constraints {
        // Provide an opinion about which version of the Spring Boot Gradle plugin clients
        // should use since it's not included in the standard spring-boot-dependencies BOM.
        api("org.springframework.boot:spring-boot-gradle-plugin:2.7.6")
    }

}

Это создаст спецификацию, которая выравнивает как spring-boot-gradle-plugin, так и spring-boot-dependencies:

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-gradle-plugin</artifactId>
            <version>2.7.6</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>2.7.6</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

Затем ваши клиентские проекты могут просто зависеть от вашей платформы и наследовать ее мнение о версии Spring Boot, используя что-то вроде этого:

buildSrc/build.gradle.kts:

// Pull in the version of the Spring Boot Gradle plugin specified by your
// platform, making it available to your regular build script.
dependencies {
    implementation(enforcedPlatform("my-group:my-base-bom:1.0.0"))
    implementation("org.springframework.boot:spring-boot-gradle-plugin")
}

build.gradle.kts:

plugins {
    id("org.springframework.boot") // version inherited from your platform
}

dependencies {
    // It's necessary to specify it for each configuration.
    implementation(enforcedPlatform("my-group:my-base-bom:1.0.0"))

    // Pull in any normal Spring Boot-managed dependencies you need (versions come from platform).
    implementation("org.springframework.boot:spring-boot-starter-web")
}

Конечно, вы также можете использовать Gradle каталоги версий для централизации версий, которые для ясности встроены в примеры.

Другие вопросы по теме