From 6099a1c6bc7e2a71fc540d3888f30a96a377326d Mon Sep 17 00:00:00 2001 From: Stephane Nicoll Date: Tue, 12 Jul 2016 14:29:58 +0200 Subject: [PATCH] Externalize dependency management plugin version Closes gh-253 --- .../generator/ProjectGenerator.groovy | 3 ++- .../metadata/InitializrConfiguration.groovy | 19 +++++++++++++++++++ .../spring-configuration-metadata.json | 12 ++++++++++++ .../resources/templates/starter-build.gradle | 10 +++++----- .../generator/ProjectGeneratorTests.groovy | 12 ++++++++++-- .../InitializrMetadataTestBuilder.groovy | 15 +++++++++++++++ .../src/main/resources/application.yml | 2 ++ 7 files changed, 65 insertions(+), 8 deletions(-) diff --git a/initializr-generator/src/main/groovy/io/spring/initializr/generator/ProjectGenerator.groovy b/initializr-generator/src/main/groovy/io/spring/initializr/generator/ProjectGenerator.groovy index 077c253c..b496cfa9 100644 --- a/initializr-generator/src/main/groovy/io/spring/initializr/generator/ProjectGenerator.groovy +++ b/initializr-generator/src/main/groovy/io/spring/initializr/generator/ProjectGenerator.groovy @@ -225,7 +225,8 @@ class ProjectGenerator { model['providedDependencies'] = filterDependencies(dependencies, Dependency.SCOPE_PROVIDED) model['testDependencies'] = filterDependencies(dependencies, Dependency.SCOPE_TEST) - // Add kotlinVersion + // Add various versions + model['dependencyManagementPluginVersion'] = metadata.configuration.env.gradle.dependencyManagementPluginVersion model['kotlinVersion'] = metadata.configuration.env.kotlin.version // @SpringBootApplication available as from 1.2.0.RC1 diff --git a/initializr-generator/src/main/groovy/io/spring/initializr/metadata/InitializrConfiguration.groovy b/initializr-generator/src/main/groovy/io/spring/initializr/metadata/InitializrConfiguration.groovy index 81d35e89..f54fcd1f 100644 --- a/initializr-generator/src/main/groovy/io/spring/initializr/metadata/InitializrConfiguration.groovy +++ b/initializr-generator/src/main/groovy/io/spring/initializr/metadata/InitializrConfiguration.groovy @@ -165,6 +165,11 @@ class InitializrConfiguration { */ final Map repositories = [:] + /** + * Gradle-specific settings. + */ + final Gradle gradle = new Gradle() + /** * Kotlin-specific settings. */ @@ -203,6 +208,7 @@ class InitializrConfiguration { fallbackApplicationName = other.fallbackApplicationName invalidApplicationNames = other.invalidApplicationNames forceSsl = other.forceSsl + gradle.merge(other.gradle) kotlin.version = other.kotlin.version maven.merge(other.maven) other.boms.each { id, bom -> @@ -217,6 +223,19 @@ class InitializrConfiguration { } } + static class Gradle { + + /** + * Version of the "dependency-management-plugin" to use. + */ + String dependencyManagementPluginVersion + + private void merge(Gradle other) { + dependencyManagementPluginVersion = other.dependencyManagementPluginVersion + } + + } + static class Kotlin { /** diff --git a/initializr-generator/src/main/resources/META-INF/spring-configuration-metadata.json b/initializr-generator/src/main/resources/META-INF/spring-configuration-metadata.json index 9672d877..fc99fcae 100644 --- a/initializr-generator/src/main/resources/META-INF/spring-configuration-metadata.json +++ b/initializr-generator/src/main/resources/META-INF/spring-configuration-metadata.json @@ -23,6 +23,12 @@ "sourceType": "io.spring.initializr.metadata.InitializrProperties", "sourceMethod": "getEnv()" }, + { + "name": "initializr.env.gradle", + "type": "io.spring.initializr.metadata.InitializrConfiguration$Env$Gradle", + "sourceType": "io.spring.initializr.metadata.InitializrConfiguration$Env", + "sourceMethod": "getGradle()" + }, { "name": "initializr.env.kotlin", "type": "io.spring.initializr.metadata.InitializrConfiguration$Env$Kotlin", @@ -175,6 +181,12 @@ "org.springframework" ] }, + { + "name": "initializr.env.gradle.dependency-management-plugin-version", + "type": "java.lang.String", + "description": "Version of the \"dependency-management-plugin\" to use.", + "sourceType": "io.spring.initializr.metadata.InitializrConfiguration$Env$Gradle" + }, { "name": "initializr.env.kotlin.version", "type": "java.lang.String", diff --git a/initializr-generator/src/main/resources/templates/starter-build.gradle b/initializr-generator/src/main/resources/templates/starter-build.gradle index 27b6c92e..dfdb71c6 100644 --- a/initializr-generator/src/main/resources/templates/starter-build.gradle +++ b/initializr-generator/src/main/resources/templates/starter-build.gradle @@ -9,8 +9,8 @@ buildscript { maven { url "https://repo.spring.io/milestone" }<% } %> } dependencies { - classpath("org.springframework.boot:spring-boot-gradle-plugin:\${springBootVersion}") <% if (!bootOneThreeAvailable) { %> - classpath('io.spring.gradle:dependency-management-plugin:0.6.0.RELEASE')<% } %><% if (language=='kotlin') { %> + classpath("org.springframework.boot:spring-boot-gradle-plugin:\${springBootVersion}")<% if (!bootOneThreeAvailable) { %> + classpath('io.spring.gradle:dependency-management-plugin:${dependencyManagementPluginVersion}')<% } %><% if (language=='kotlin') { %> classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:\${kotlinVersion}")<% } %> } } @@ -18,8 +18,8 @@ buildscript { apply plugin: '${language}'<% if (packaging=='war') { %> apply plugin: 'eclipse-wtp'<% } else { %> apply plugin: 'eclipse'<% } %> -apply plugin: 'spring-boot' <% if (!bootOneThreeAvailable) { %> -apply plugin: 'io.spring.dependency-management' <% } %><% if (packaging=='war') { %> +apply plugin: 'spring-boot'<% if (!bootOneThreeAvailable) { %> +apply plugin: 'io.spring.dependency-management'<% } %><% if (packaging=='war') { %> apply plugin: 'war' <% } %> @@ -45,7 +45,7 @@ dependencies {<% compileDependencies.each { %> compile("org.jetbrains.kotlin:kotlin-stdlib:\${kotlinVersion}")<% } %><% runtimeDependencies.each { %> runtime('${it.groupId}:${it.artifactId}${it.version ? ":$it.version" : ""}${it.type ? "@$it.type" : ""}')<% } %><% providedDependencies.each { %> providedRuntime('${it.groupId}:${it.artifactId}${it.version ? ":$it.version" : ""}${it.type ? "@$it.type" : ""}')<% } %> - testCompile('org.springframework.boot:spring-boot-starter-test') <% testDependencies.each { %> + testCompile('org.springframework.boot:spring-boot-starter-test')<% testDependencies.each { %> testCompile('${it.groupId}:${it.artifactId}${it.version ? ":$it.version" : ""}${it.type ? "@$it.type" : ""}')<% } %> } <% if (boms) { %> diff --git a/initializr-generator/src/test/groovy/io/spring/initializr/generator/ProjectGeneratorTests.groovy b/initializr-generator/src/test/groovy/io/spring/initializr/generator/ProjectGeneratorTests.groovy index eaa2d90f..d8461e66 100644 --- a/initializr-generator/src/test/groovy/io/spring/initializr/generator/ProjectGeneratorTests.groovy +++ b/initializr-generator/src/test/groovy/io/spring/initializr/generator/ProjectGeneratorTests.groovy @@ -411,23 +411,31 @@ class ProjectGeneratorTests extends AbstractProjectGeneratorTests { @Test void gradleBuildBeforeWithSpringBoot13() { + def metadata = InitializrMetadataTestBuilder.withDefaults() + .addDependencyGroup('core', 'web', 'jpa') + .setGradleEnv('0.5.9.RELEASE').build() + applyMetadata(metadata) def request = createProjectRequest('web') request.bootVersion = '1.2.3.RELEASE' generateGradleBuild(request) .contains("springBootVersion = '1.2.3.RELEASE'") - .contains("classpath('io.spring.gradle:dependency-management-plugin:0.6.0.RELEASE')") + .contains("classpath('io.spring.gradle:dependency-management-plugin:0.5.9.RELEASE')") .contains("apply plugin: 'spring-boot'") .contains("apply plugin: 'io.spring.dependency-management'") } @Test void gradleBuildAsFromSpringBoot13() { + def metadata = InitializrMetadataTestBuilder.withDefaults() + .addDependencyGroup('core', 'web', 'jpa') + .setGradleEnv('0.5.9.RELEASE').build() + applyMetadata(metadata) def request = createProjectRequest('web') request.bootVersion = '1.3.0.BUILD-SNAPSHOT' generateGradleBuild(request) .contains("springBootVersion = '1.3.0.BUILD-SNAPSHOT'") .contains("apply plugin: 'spring-boot'") - .doesNotContain("classpath('io.spring.gradle:dependency-management-plugin:0.6.0.RELEASE')") + .doesNotContain("classpath('io.spring.gradle:dependency-management-plugin:0.5.9.RELEASE')") .doesNotContain("apply plugin: 'io.spring.dependency-management'") } diff --git a/initializr-generator/src/test/groovy/io/spring/initializr/test/metadata/InitializrMetadataTestBuilder.groovy b/initializr-generator/src/test/groovy/io/spring/initializr/test/metadata/InitializrMetadataTestBuilder.groovy index 38ca45c5..170e5753 100644 --- a/initializr-generator/src/test/groovy/io/spring/initializr/test/metadata/InitializrMetadataTestBuilder.groovy +++ b/initializr-generator/src/test/groovy/io/spring/initializr/test/metadata/InitializrMetadataTestBuilder.groovy @@ -67,6 +67,7 @@ class InitializrMetadataTestBuilder { InitializrMetadataTestBuilder addDefaults() { addDefaultTypes().addDefaultPackagings().addDefaultJavaVersions() .addDefaultLanguages().addDefaultBootVersions() + .setGradleEnv('0.5.1.RELEASE').setKotlinEnv('1.0.1') } InitializrMetadataTestBuilder addDefaultTypes() { @@ -152,6 +153,20 @@ class InitializrMetadataTestBuilder { this } + InitializrMetadataTestBuilder setGradleEnv(String dependencyManagementPluginVersion) { + builder.withCustomizer { + it.configuration.env.gradle.dependencyManagementPluginVersion = dependencyManagementPluginVersion + } + this + } + + InitializrMetadataTestBuilder setKotlinEnv(String kotlinVersion) { + builder.withCustomizer { + it.configuration.env.kotlin.version = kotlinVersion + } + this + } + InitializrMetadataTestBuilder setMavenParent(String groupId, String artifactId, String version, boolean includeSpringBootBom) { builder.withCustomizer { diff --git a/initializr-service/src/main/resources/application.yml b/initializr-service/src/main/resources/application.yml index dd906086..b9b39b71 100644 --- a/initializr-service/src/main/resources/application.yml +++ b/initializr-service/src/main/resources/application.yml @@ -46,6 +46,8 @@ initializr: artifactId: spring-cloud-services-dependencies version: 1.1.0.RELEASE additionalBoms: [cloud-bom] + gradle: + dependency-management-plugin-version: 0.6.0.RELEASE kotlin: version: 1.0.2 dependencies: