Мы используем спецификацию, чтобы поделиться нашим управлением зависимостями в 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? И если я не могу, что является хорошей практикой «не повторять себя», чтобы сделать это?
@ Юджин, я не понимаю тебя. Возможно, вы правы, но я не понимаю вашего предложения. Не могли бы вы подробнее рассказать об этом?
извините, я перечитал вопрос и более внимательно рассмотрел, как мы это делаем. и... этим мы тоже не занимаемся из-за этой проблемы. Так что нет, ответ таков, пока это не будет исправлено (что не кажется в ближайшем будущем), вы просто не сможете. Я не думаю, что даже стоит делать это ответом.
Ваша пользовательская платформа может предоставить мнение о том, какую версию плагина 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 каталоги версий для централизации версий, которые для ясности встроены в примеры.
ждать. если у вас уже есть
bom
, почему вы не можете добавить свой плагин подbuild -> pluginManagement -> plugins -> plugin
в эту спецификацию и во всех проектах использовать эту композицию в качестве родителя?