diff --git a/initializr-generator-spring/src/main/java/io/spring/initializr/generator/spring/build/gradle/GradleProjectGenerationConfiguration.java b/initializr-generator-spring/src/main/java/io/spring/initializr/generator/spring/build/gradle/GradleProjectGenerationConfiguration.java index a1f8702d..85514a19 100644 --- a/initializr-generator-spring/src/main/java/io/spring/initializr/generator/spring/build/gradle/GradleProjectGenerationConfiguration.java +++ b/initializr-generator-spring/src/main/java/io/spring/initializr/generator/spring/build/gradle/GradleProjectGenerationConfiguration.java @@ -101,9 +101,10 @@ public class GradleProjectGenerationConfiguration { @Bean @ConditionalOnPlatformVersion("2.0.0.M1") - @ConditionalOnBuildSystem(id = GradleBuildSystem.ID, dialect = GradleBuildSystem.DIALECT_GROOVY) - public BuildCustomizer applyDependencyManagementPluginContributor() { - return (build) -> build.plugins().apply("io.spring.dependency-management"); + BuildCustomizer springBootPluginContributor(ResolvedProjectDescription projectDescription, + ObjectProvider versionResolver, InitializrMetadata metadata) { + return new SpringBootPluginBuildCustomizer(projectDescription, versionResolver + .getIfAvailable(() -> new InitializrDependencyManagementPluginVersionResolver(metadata))); } @Bean @@ -243,20 +244,6 @@ public class GradleProjectGenerationConfiguration { new KotlinDslGradleSettingsWriter(), "settings.gradle.kts"); } - @Bean - BuildCustomizer springBootPluginContributor(ResolvedProjectDescription projectDescription, - ObjectProvider versionResolver, - InitializrMetadata metadata) { - return (build) -> { - build.plugins().add("org.springframework.boot", - (plugin) -> plugin.setVersion(projectDescription.getPlatformVersion().toString())); - build.plugins().add("io.spring.dependency-management", - (plugin) -> plugin.setVersion(versionResolver - .getIfAvailable(() -> new InitializrDependencyManagementPluginVersionResolver(metadata)) - .resolveDependencyManagementPluginVersion(projectDescription))); - }; - } - @Bean @ConditionalOnPlatformVersion("2.2.0.M3") BuildCustomizer testTaskContributor() { diff --git a/initializr-generator-spring/src/main/java/io/spring/initializr/generator/spring/build/gradle/SpringBootPluginBuildCustomizer.java b/initializr-generator-spring/src/main/java/io/spring/initializr/generator/spring/build/gradle/SpringBootPluginBuildCustomizer.java new file mode 100644 index 00000000..c6b86f7f --- /dev/null +++ b/initializr-generator-spring/src/main/java/io/spring/initializr/generator/spring/build/gradle/SpringBootPluginBuildCustomizer.java @@ -0,0 +1,60 @@ +/* + * Copyright 2012-2019 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.spring.initializr.generator.spring.build.gradle; + +import io.spring.initializr.generator.buildsystem.gradle.GradleBuild; +import io.spring.initializr.generator.project.ResolvedProjectDescription; +import io.spring.initializr.generator.spring.build.BuildCustomizer; + +/** + * A {@link BuildCustomizer} to configure the Spring Boot plugin and dependency management + * feature for a {@link GradleBuild}. + * + * @author Stephane Nicoll + */ +public final class SpringBootPluginBuildCustomizer implements BuildCustomizer { + + /** + * Order of this customizer. Runs before default customizers so that these plugins are + * added at the beginning of the {@code plugins} block. + */ + public static final int ORDER = -100; + + private final ResolvedProjectDescription projectDescription; + + private final DependencyManagementPluginVersionResolver versionResolver; + + public SpringBootPluginBuildCustomizer(ResolvedProjectDescription projectDescription, + DependencyManagementPluginVersionResolver versionResolver) { + this.projectDescription = projectDescription; + this.versionResolver = versionResolver; + } + + @Override + public void customize(GradleBuild build) { + build.plugins().add("org.springframework.boot", + (plugin) -> plugin.setVersion(this.projectDescription.getPlatformVersion().toString())); + build.plugins().add("io.spring.dependency-management", (plugin) -> plugin + .setVersion(this.versionResolver.resolveDependencyManagementPluginVersion(this.projectDescription))); + } + + @Override + public int getOrder() { + return ORDER; + } + +} diff --git a/initializr-generator-spring/src/test/java/io/spring/initializr/generator/spring/build/gradle/GradleProjectGenerationConfigurationTests.java b/initializr-generator-spring/src/test/java/io/spring/initializr/generator/spring/build/gradle/GradleProjectGenerationConfigurationTests.java index 1020e4d4..08cb293b 100644 --- a/initializr-generator-spring/src/test/java/io/spring/initializr/generator/spring/build/gradle/GradleProjectGenerationConfigurationTests.java +++ b/initializr-generator-spring/src/test/java/io/spring/initializr/generator/spring/build/gradle/GradleProjectGenerationConfigurationTests.java @@ -120,7 +120,7 @@ class GradleProjectGenerationConfigurationTests { assertThat(relativePaths).contains("build.gradle"); List lines = projectStructure.readAllLines("build.gradle"); assertThat(lines).containsExactly("plugins {", " id 'org.springframework.boot' version '2.1.0.RELEASE'", - " id 'java'", "}", "", "apply plugin: 'io.spring.dependency-management'", "", + " id 'io.spring.dependency-management' version '1.0.6.RELEASE'", " id 'java'", "}", "", "group = 'com.example'", "version = '0.0.1-SNAPSHOT'", "sourceCompatibility = '11'", "", "repositories {", " mavenCentral()", "}", "", "dependencies {", " implementation 'org.springframework.boot:spring-boot-starter'", diff --git a/initializr-generator-spring/src/test/resources/project/gradle/annotation-processor-dependency-build.gradle.gen b/initializr-generator-spring/src/test/resources/project/gradle/annotation-processor-dependency-build.gradle.gen index b732ac6b..cda38b34 100644 --- a/initializr-generator-spring/src/test/resources/project/gradle/annotation-processor-dependency-build.gradle.gen +++ b/initializr-generator-spring/src/test/resources/project/gradle/annotation-processor-dependency-build.gradle.gen @@ -1,10 +1,9 @@ plugins { id 'org.springframework.boot' version '2.1.1.RELEASE' + id 'io.spring.dependency-management' version '1.0.6.RELEASE' id 'java' } -apply plugin: 'io.spring.dependency-management' - group = 'com.example' version = '0.0.1-SNAPSHOT' sourceCompatibility = '1.8' diff --git a/initializr-generator-spring/src/test/resources/project/gradle/bom-ordering-build.gradle.gen b/initializr-generator-spring/src/test/resources/project/gradle/bom-ordering-build.gradle.gen index 267e2d4c..eb0d8a89 100644 --- a/initializr-generator-spring/src/test/resources/project/gradle/bom-ordering-build.gradle.gen +++ b/initializr-generator-spring/src/test/resources/project/gradle/bom-ordering-build.gradle.gen @@ -1,10 +1,9 @@ plugins { id 'org.springframework.boot' version '2.1.1.RELEASE' + id 'io.spring.dependency-management' version '1.0.6.RELEASE' id 'java' } -apply plugin: 'io.spring.dependency-management' - group = 'com.example' version = '0.0.1-SNAPSHOT' sourceCompatibility = '1.8' diff --git a/initializr-generator-spring/src/test/resources/project/gradle/bom-property-build.gradle.gen b/initializr-generator-spring/src/test/resources/project/gradle/bom-property-build.gradle.gen index 6bfb446d..69f1ebaf 100644 --- a/initializr-generator-spring/src/test/resources/project/gradle/bom-property-build.gradle.gen +++ b/initializr-generator-spring/src/test/resources/project/gradle/bom-property-build.gradle.gen @@ -1,10 +1,9 @@ plugins { id 'org.springframework.boot' version '2.1.1.RELEASE' + id 'io.spring.dependency-management' version '1.0.6.RELEASE' id 'java' } -apply plugin: 'io.spring.dependency-management' - group = 'com.example' version = '0.0.1-SNAPSHOT' sourceCompatibility = '1.8' diff --git a/initializr-generator-spring/src/test/resources/project/gradle/compile-only-dependency-build.gradle.gen b/initializr-generator-spring/src/test/resources/project/gradle/compile-only-dependency-build.gradle.gen index 6cd8e99c..4ff8ff63 100644 --- a/initializr-generator-spring/src/test/resources/project/gradle/compile-only-dependency-build.gradle.gen +++ b/initializr-generator-spring/src/test/resources/project/gradle/compile-only-dependency-build.gradle.gen @@ -1,10 +1,9 @@ plugins { id 'org.springframework.boot' version '2.1.1.RELEASE' + id 'io.spring.dependency-management' version '1.0.6.RELEASE' id 'java' } -apply plugin: 'io.spring.dependency-management' - group = 'com.example' version = '0.0.1-SNAPSHOT' sourceCompatibility = '1.8' diff --git a/initializr-generator-spring/src/test/resources/project/gradle/kotlin-java11-build.gradle.gen b/initializr-generator-spring/src/test/resources/project/gradle/kotlin-java11-build.gradle.gen index 2c4f0f49..4fa5ff45 100644 --- a/initializr-generator-spring/src/test/resources/project/gradle/kotlin-java11-build.gradle.gen +++ b/initializr-generator-spring/src/test/resources/project/gradle/kotlin-java11-build.gradle.gen @@ -2,12 +2,11 @@ import org.jetbrains.kotlin.gradle.tasks.KotlinCompile plugins { id 'org.springframework.boot' version '2.1.1.RELEASE' + id 'io.spring.dependency-management' version '1.0.6.RELEASE' id 'org.jetbrains.kotlin.jvm' version '1.1.1' id 'org.jetbrains.kotlin.plugin.spring' version '1.1.1' } -apply plugin: 'io.spring.dependency-management' - group = 'com.example' version = '0.0.1-SNAPSHOT' sourceCompatibility = '11' diff --git a/initializr-generator-spring/src/test/resources/project/gradle/repositories-build.gradle.gen b/initializr-generator-spring/src/test/resources/project/gradle/repositories-build.gradle.gen index ccc28283..dc722db5 100644 --- a/initializr-generator-spring/src/test/resources/project/gradle/repositories-build.gradle.gen +++ b/initializr-generator-spring/src/test/resources/project/gradle/repositories-build.gradle.gen @@ -1,10 +1,9 @@ plugins { id 'org.springframework.boot' version '2.1.1.RELEASE' + id 'io.spring.dependency-management' version '1.0.6.RELEASE' id 'java' } -apply plugin: 'io.spring.dependency-management' - group = 'com.example' version = '0.0.1-SNAPSHOT' sourceCompatibility = '1.8' diff --git a/initializr-generator-spring/src/test/resources/project/gradle/repositories-milestone-build.gradle.gen b/initializr-generator-spring/src/test/resources/project/gradle/repositories-milestone-build.gradle.gen index d7941d56..23edb0fa 100644 --- a/initializr-generator-spring/src/test/resources/project/gradle/repositories-milestone-build.gradle.gen +++ b/initializr-generator-spring/src/test/resources/project/gradle/repositories-milestone-build.gradle.gen @@ -1,10 +1,9 @@ plugins { id 'org.springframework.boot' version '2.2.0.M1' + id 'io.spring.dependency-management' version '1.0.6.RELEASE' id 'java' } -apply plugin: 'io.spring.dependency-management' - group = 'com.example' version = '0.0.1-SNAPSHOT' sourceCompatibility = '1.8' diff --git a/initializr-generator-spring/src/test/resources/project/gradle/version-override-build.gradle.gen b/initializr-generator-spring/src/test/resources/project/gradle/version-override-build.gradle.gen index 251fc5f0..9af432db 100644 --- a/initializr-generator-spring/src/test/resources/project/gradle/version-override-build.gradle.gen +++ b/initializr-generator-spring/src/test/resources/project/gradle/version-override-build.gradle.gen @@ -1,10 +1,9 @@ plugins { id 'org.springframework.boot' version '2.1.1.RELEASE' + id 'io.spring.dependency-management' version '1.0.6.RELEASE' id 'java' } -apply plugin: 'io.spring.dependency-management' - group = 'com.example' version = '0.0.1-SNAPSHOT' sourceCompatibility = '1.8' diff --git a/initializr-generator-spring/src/test/resources/project/groovy/next/build.gradle.gen b/initializr-generator-spring/src/test/resources/project/groovy/next/build.gradle.gen index 04ca2c46..da479df8 100644 --- a/initializr-generator-spring/src/test/resources/project/groovy/next/build.gradle.gen +++ b/initializr-generator-spring/src/test/resources/project/groovy/next/build.gradle.gen @@ -1,10 +1,9 @@ plugins { id 'org.springframework.boot' version '2.2.0.RELEASE' + id 'io.spring.dependency-management' version '1.0.6.RELEASE' id 'groovy' } -apply plugin: 'io.spring.dependency-management' - group = 'com.example' version = '0.0.1-SNAPSHOT' sourceCompatibility = '1.8' diff --git a/initializr-generator-spring/src/test/resources/project/groovy/standard/build.gradle.gen b/initializr-generator-spring/src/test/resources/project/groovy/standard/build.gradle.gen index 4e5bb010..f7e76173 100644 --- a/initializr-generator-spring/src/test/resources/project/groovy/standard/build.gradle.gen +++ b/initializr-generator-spring/src/test/resources/project/groovy/standard/build.gradle.gen @@ -1,10 +1,9 @@ plugins { id 'org.springframework.boot' version '2.1.1.RELEASE' + id 'io.spring.dependency-management' version '1.0.6.RELEASE' id 'groovy' } -apply plugin: 'io.spring.dependency-management' - group = 'com.example' version = '0.0.1-SNAPSHOT' sourceCompatibility = '1.8' diff --git a/initializr-generator-spring/src/test/resources/project/groovy/standard/war-build.gradle.gen b/initializr-generator-spring/src/test/resources/project/groovy/standard/war-build.gradle.gen index 501df70b..0f11ce66 100644 --- a/initializr-generator-spring/src/test/resources/project/groovy/standard/war-build.gradle.gen +++ b/initializr-generator-spring/src/test/resources/project/groovy/standard/war-build.gradle.gen @@ -1,11 +1,10 @@ plugins { id 'org.springframework.boot' version '2.1.1.RELEASE' + id 'io.spring.dependency-management' version '1.0.6.RELEASE' id 'war' id 'groovy' } -apply plugin: 'io.spring.dependency-management' - group = 'com.example' version = '0.0.1-SNAPSHOT' sourceCompatibility = '1.8' diff --git a/initializr-generator-spring/src/test/resources/project/java/next/build.gradle.gen b/initializr-generator-spring/src/test/resources/project/java/next/build.gradle.gen index 15f90583..26419554 100644 --- a/initializr-generator-spring/src/test/resources/project/java/next/build.gradle.gen +++ b/initializr-generator-spring/src/test/resources/project/java/next/build.gradle.gen @@ -1,10 +1,9 @@ plugins { id 'org.springframework.boot' version '2.2.0.RELEASE' + id 'io.spring.dependency-management' version '1.0.6.RELEASE' id 'java' } -apply plugin: 'io.spring.dependency-management' - group = 'com.example' version = '0.0.1-SNAPSHOT' sourceCompatibility = '1.8' diff --git a/initializr-generator-spring/src/test/resources/project/java/standard/build.gradle.gen b/initializr-generator-spring/src/test/resources/project/java/standard/build.gradle.gen index c5f29104..53ef13f2 100644 --- a/initializr-generator-spring/src/test/resources/project/java/standard/build.gradle.gen +++ b/initializr-generator-spring/src/test/resources/project/java/standard/build.gradle.gen @@ -1,10 +1,9 @@ plugins { id 'org.springframework.boot' version '2.1.1.RELEASE' + id 'io.spring.dependency-management' version '1.0.6.RELEASE' id 'java' } -apply plugin: 'io.spring.dependency-management' - group = 'com.example' version = '0.0.1-SNAPSHOT' sourceCompatibility = '1.8' diff --git a/initializr-generator-spring/src/test/resources/project/java/standard/war-build.gradle.gen b/initializr-generator-spring/src/test/resources/project/java/standard/war-build.gradle.gen index e6d0e4fd..9da7345d 100644 --- a/initializr-generator-spring/src/test/resources/project/java/standard/war-build.gradle.gen +++ b/initializr-generator-spring/src/test/resources/project/java/standard/war-build.gradle.gen @@ -1,11 +1,10 @@ plugins { id 'org.springframework.boot' version '2.1.1.RELEASE' + id 'io.spring.dependency-management' version '1.0.6.RELEASE' id 'java' id 'war' } -apply plugin: 'io.spring.dependency-management' - group = 'com.example' version = '0.0.1-SNAPSHOT' sourceCompatibility = '1.8' diff --git a/initializr-generator-spring/src/test/resources/project/kotlin/next/build.gradle.gen b/initializr-generator-spring/src/test/resources/project/kotlin/next/build.gradle.gen index 8a607d0b..dfa1e46e 100644 --- a/initializr-generator-spring/src/test/resources/project/kotlin/next/build.gradle.gen +++ b/initializr-generator-spring/src/test/resources/project/kotlin/next/build.gradle.gen @@ -2,12 +2,11 @@ import org.jetbrains.kotlin.gradle.tasks.KotlinCompile plugins { id 'org.springframework.boot' version '2.2.0.RELEASE' + id 'io.spring.dependency-management' version '1.0.6.RELEASE' id 'org.jetbrains.kotlin.jvm' version '1.1.1' id 'org.jetbrains.kotlin.plugin.spring' version '1.1.1' } -apply plugin: 'io.spring.dependency-management' - group = 'com.example' version = '0.0.1-SNAPSHOT' sourceCompatibility = '1.8' diff --git a/initializr-generator-spring/src/test/resources/project/kotlin/standard/build.gradle.gen b/initializr-generator-spring/src/test/resources/project/kotlin/standard/build.gradle.gen index 2d88fb06..72f978a9 100644 --- a/initializr-generator-spring/src/test/resources/project/kotlin/standard/build.gradle.gen +++ b/initializr-generator-spring/src/test/resources/project/kotlin/standard/build.gradle.gen @@ -2,12 +2,11 @@ import org.jetbrains.kotlin.gradle.tasks.KotlinCompile plugins { id 'org.springframework.boot' version '2.1.1.RELEASE' + id 'io.spring.dependency-management' version '1.0.6.RELEASE' id 'org.jetbrains.kotlin.jvm' version '1.1.1' id 'org.jetbrains.kotlin.plugin.spring' version '1.1.1' } -apply plugin: 'io.spring.dependency-management' - group = 'com.example' version = '0.0.1-SNAPSHOT' sourceCompatibility = '1.8' diff --git a/initializr-generator-spring/src/test/resources/project/kotlin/standard/war-build.gradle.gen b/initializr-generator-spring/src/test/resources/project/kotlin/standard/war-build.gradle.gen index 8ec33eb9..88eecd78 100644 --- a/initializr-generator-spring/src/test/resources/project/kotlin/standard/war-build.gradle.gen +++ b/initializr-generator-spring/src/test/resources/project/kotlin/standard/war-build.gradle.gen @@ -2,13 +2,12 @@ import org.jetbrains.kotlin.gradle.tasks.KotlinCompile plugins { id 'org.springframework.boot' version '2.1.1.RELEASE' + id 'io.spring.dependency-management' version '1.0.6.RELEASE' id 'war' id 'org.jetbrains.kotlin.jvm' version '1.1.1' id 'org.jetbrains.kotlin.plugin.spring' version '1.1.1' } -apply plugin: 'io.spring.dependency-management' - group = 'com.example' version = '0.0.1-SNAPSHOT' sourceCompatibility = '1.8'