From adf5cf068e116cfd278b9d7b860f0518bfddc8b3 Mon Sep 17 00:00:00 2001 From: Stephane Nicoll Date: Thu, 26 Mar 2015 17:11:16 +0100 Subject: [PATCH] Support for dependency management plugin Add support for the dependency management plugin for Gradle so that BOMs can be added to the project if needed. Also, the Gradle plugin as from Spring Boot 1.3 has changed and this commit brings a transparent support for it. Closes gh-98 --- .../generator/ProjectGenerator.groovy | 7 +++++ .../resources/templates/starter-build.gradle | 15 +++++----- ...ojectGenerationMetricsListenerTests.groovy | 2 +- .../generator/ProjectGeneratorTests.groovy | 28 ++++++++++++++++++- .../initializr/test/GradleBuildAssert.groovy | 6 ++++ .../test/InitializrMetadataTestBuilder.groovy | 4 +-- 6 files changed, 51 insertions(+), 11 deletions(-) diff --git a/initializr/src/main/groovy/io/spring/initializr/generator/ProjectGenerator.groovy b/initializr/src/main/groovy/io/spring/initializr/generator/ProjectGenerator.groovy index 6cef4709..8b8e24d2 100644 --- a/initializr/src/main/groovy/io/spring/initializr/generator/ProjectGenerator.groovy +++ b/initializr/src/main/groovy/io/spring/initializr/generator/ProjectGenerator.groovy @@ -39,6 +39,8 @@ class ProjectGenerator { private static final VERSION_1_2_0_RC1 = Version.parse('1.2.0.RC1') + private static final VERSION_1_3_0_M1 = Version.parse('1.3.0.M1') + @Autowired InitializrMetadata metadata @@ -183,6 +185,11 @@ class ProjectGenerator { // @SpringBootApplication available as from 1.2.0.RC1 model['useSpringBootApplication'] = VERSION_1_2_0_RC1 .compareTo(Version.safeParse(request.bootVersion)) <= 0 + + // Gradle plugin has changed as from 1.3.0 + model['bootOneThreeAvailable'] = VERSION_1_3_0_M1 + .compareTo(Version.safeParse(request.bootVersion)) <= 0 + model } diff --git a/initializr/src/main/resources/templates/starter-build.gradle b/initializr/src/main/resources/templates/starter-build.gradle index 7744d503..1b231b43 100644 --- a/initializr/src/main/resources/templates/starter-build.gradle +++ b/initializr/src/main/resources/templates/starter-build.gradle @@ -5,19 +5,21 @@ buildscript { repositories { mavenCentral()<% if (!bootVersion.contains("RELEASE")) { %> maven { url "https://repo.spring.io/snapshot" } - maven { url "https://repo.spring.io/milestone" } -<% } %> + maven { url "https://repo.spring.io/milestone" }<% } %> } dependencies { - classpath("org.springframework.boot:spring-boot-gradle-plugin:\${springBootVersion}") + classpath("org.springframework.boot:spring-boot-gradle-plugin:\${springBootVersion}") <% if (!bootOneThreeAvailable) { %> + classpath("io.spring.gradle:dependency-management-plugin:0.4.1.RELEASE")<% } %> } } apply plugin: '${language}'<% if (packaging=='war') { %> apply plugin: 'eclipse-wtp'<% } else { %> apply plugin: 'eclipse'<% } %> -apply plugin: 'idea' -apply plugin: 'spring-boot' <% if (packaging=='war') { %> +apply plugin: 'idea' <% if (bootOneThreeAvailable) { %> +apply plugin: 'org.springframework.boot.spring-boot' <% } else { %> +apply plugin: 'spring-boot' +apply plugin: 'io.spring.dependency-management'<% } %><% if (packaging=='war') { %> apply plugin: 'war' <% } %> @@ -31,8 +33,7 @@ targetCompatibility = ${javaVersion} repositories { mavenCentral()<% if (!bootVersion.contains("RELEASE")) { %> maven { url "https://repo.spring.io/snapshot" } - maven { url "https://repo.spring.io/milestone" } -<% } %> + maven { url "https://repo.spring.io/milestone" }<% } %> } <% if (packaging=='war') { %>configurations { diff --git a/initializr/src/test/groovy/io/spring/initializr/generator/ProjectGenerationMetricsListenerTests.groovy b/initializr/src/test/groovy/io/spring/initializr/generator/ProjectGenerationMetricsListenerTests.groovy index f62c3545..54975515 100644 --- a/initializr/src/test/groovy/io/spring/initializr/generator/ProjectGenerationMetricsListenerTests.groovy +++ b/initializr/src/test/groovy/io/spring/initializr/generator/ProjectGenerationMetricsListenerTests.groovy @@ -168,7 +168,7 @@ class ProjectGenerationMetricsListenerTests { def request = initialize() request.resolve(metadata) listener.onGeneratedProject(request) - metricsAssert.hasValue(1, 'initializr.boot_version.1_1_5_RELEASE') + metricsAssert.hasValue(1, 'initializr.boot_version.1_2_3_RELEASE') } @Test diff --git a/initializr/src/test/groovy/io/spring/initializr/generator/ProjectGeneratorTests.groovy b/initializr/src/test/groovy/io/spring/initializr/generator/ProjectGeneratorTests.groovy index 7f5f9dc8..c31ce7c3 100644 --- a/initializr/src/test/groovy/io/spring/initializr/generator/ProjectGeneratorTests.groovy +++ b/initializr/src/test/groovy/io/spring/initializr/generator/ProjectGeneratorTests.groovy @@ -31,7 +31,9 @@ import org.springframework.boot.autoconfigure.SpringBootApplication import org.springframework.context.annotation.ComponentScan import org.springframework.context.annotation.Configuration -import static org.mockito.Mockito.* +import static org.mockito.Mockito.mock +import static org.mockito.Mockito.times +import static org.mockito.Mockito.verify /** * @author Stephane Nicoll @@ -300,6 +302,30 @@ class ProjectGeneratorTests { .contains("testCompile(\"org.hamcrest:hamcrest\")") } + @Test + void gradleBuildBeforeWithSpringBoot13() { + 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.4.1.RELEASE")') + .contains("apply plugin: 'spring-boot'") + .contains("apply plugin: 'io.spring.dependency-management'") + .doesNotContain("apply plugin: 'org.springframework.boot.spring-boot'") + } + + @Test + void gradleBuildAsFromSpringBoot13() { + def request = createProjectRequest('web') + request.bootVersion = '1.3.0.BUILD-SNAPSHOT' + generateGradleBuild(request) + .contains("springBootVersion = '1.3.0.BUILD-SNAPSHOT'") + .contains("apply plugin: 'org.springframework.boot.spring-boot'") + .doesNotContain('classpath("io.spring.gradle:dependency-management-plugin:0.4.1.RELEASE")') + .doesNotContain("apply plugin: 'spring-boot'") + .doesNotContain("apply plugin: 'io.spring.dependency-management'") + } + PomAssert generateMavenPom(ProjectRequest request) { def content = new String(projectGenerator.generateMavenPom(request)) new PomAssert(content).validateProjectRequest(request) diff --git a/initializr/src/test/groovy/io/spring/initializr/test/GradleBuildAssert.groovy b/initializr/src/test/groovy/io/spring/initializr/test/GradleBuildAssert.groovy index f9c2d5d2..86568b6a 100644 --- a/initializr/src/test/groovy/io/spring/initializr/test/GradleBuildAssert.groovy +++ b/initializr/src/test/groovy/io/spring/initializr/test/GradleBuildAssert.groovy @@ -18,6 +18,7 @@ package io.spring.initializr.test import io.spring.initializr.generator.ProjectRequest +import static org.junit.Assert.assertFalse import static org.junit.Assert.assertTrue /** @@ -63,4 +64,9 @@ class GradleBuildAssert { assertTrue "$expression has not been found in gradle build $content", content.contains(expression) this } + + GradleBuildAssert doesNotContain(String expression) { + assertFalse "$expression is not expected in gradle build $content", content.contains(expression) + this + } } diff --git a/initializr/src/test/groovy/io/spring/initializr/test/InitializrMetadataTestBuilder.groovy b/initializr/src/test/groovy/io/spring/initializr/test/InitializrMetadataTestBuilder.groovy index 6242f4ef..36a33e77 100644 --- a/initializr/src/test/groovy/io/spring/initializr/test/InitializrMetadataTestBuilder.groovy +++ b/initializr/src/test/groovy/io/spring/initializr/test/InitializrMetadataTestBuilder.groovy @@ -128,8 +128,8 @@ class InitializrMetadataTestBuilder { } InitializrMetadataTestBuilder addDefaultBootVersions() { - addBootVersion('1.0.2.RELEASE', false).addBootVersion('1.1.5.RELEASE', true) - .addBootVersion('1.2.0.BUILD-SNAPSHOT', false) + addBootVersion('1.1.2.RELEASE', false).addBootVersion('1.2.3.RELEASE', true) + .addBootVersion('1.3.0.BUILD-SNAPSHOT', false) } InitializrMetadataTestBuilder addBootVersion(String id, boolean defaultValue) {