From aa75b1efaa7ed504ced00c0633dce12541e01a43 Mon Sep 17 00:00:00 2001 From: Chris Vogel Date: Wed, 28 Mar 2018 21:11:24 -0500 Subject: [PATCH 1/2] Create a settings.gradle file for Gradle projects See gh-643 --- .../io/spring/initializr/generator/ProjectGenerator.java | 7 +++++++ .../src/main/resources/templates/starter-settings.gradle | 1 + 2 files changed, 8 insertions(+) create mode 100644 initializr-generator/src/main/resources/templates/starter-settings.gradle diff --git a/initializr-generator/src/main/java/io/spring/initializr/generator/ProjectGenerator.java b/initializr-generator/src/main/java/io/spring/initializr/generator/ProjectGenerator.java index 920afc96..ce04fd17 100644 --- a/initializr-generator/src/main/java/io/spring/initializr/generator/ProjectGenerator.java +++ b/initializr-generator/src/main/java/io/spring/initializr/generator/ProjectGenerator.java @@ -59,6 +59,7 @@ import org.springframework.util.StreamUtils; * @author Stephane Nicoll * @author Sebastien Deleuze * @author Andy Wilkinson + * @author Chris Vogel */ public class ProjectGenerator { @@ -219,6 +220,8 @@ public class ProjectGenerator { if (isGradleBuild(request)) { String gradle = new String(doGenerateGradleBuild(model)); writeText(new File(dir, "build.gradle"), gradle); + String settings = new String(doGenerateGradleSettings(model)); + writeText(new File(dir, "settings.gradle"), settings); writeGradleWrapper(dir, Version.safeParse(request.getBootVersion())); } else { @@ -600,6 +603,10 @@ public class ProjectGenerator { return templateRenderer.process("starter-build.gradle", model).getBytes(); } + private byte[] doGenerateGradleSettings(Map model) { + return templateRenderer.process("starter-settings.gradle", model).getBytes(); + } + private void writeGradleWrapper(File dir, Version bootVersion) { String gradlePrefix = isGradle4Available(bootVersion) ? "gradle4" : isGradle3Available(bootVersion) ? "gradle3" : "gradle"; diff --git a/initializr-generator/src/main/resources/templates/starter-settings.gradle b/initializr-generator/src/main/resources/templates/starter-settings.gradle new file mode 100644 index 00000000..448dc076 --- /dev/null +++ b/initializr-generator/src/main/resources/templates/starter-settings.gradle @@ -0,0 +1 @@ +rootProject.name = '{{artifactId}}' \ No newline at end of file From 5fef28a763bf9ea15959dc49ceb2347723f2ee79 Mon Sep 17 00:00:00 2001 From: Stephane Nicoll Date: Thu, 29 Mar 2018 10:14:47 +0200 Subject: [PATCH 2/2] Polish "Create a settings.gradle file for Gradle projects" Closes gh-643 --- .../templates/starter-settings.gradle | 2 +- .../generator/ProjectGeneratorTests.java | 22 ++++++++++ .../test/generator/GradleSettingsAssert.java | 43 +++++++++++++++++++ .../test/generator/ProjectAssert.java | 15 ++++++- 4 files changed, 80 insertions(+), 2 deletions(-) create mode 100644 initializr-generator/src/test/java/io/spring/initializr/test/generator/GradleSettingsAssert.java diff --git a/initializr-generator/src/main/resources/templates/starter-settings.gradle b/initializr-generator/src/main/resources/templates/starter-settings.gradle index 448dc076..cc08101c 100644 --- a/initializr-generator/src/main/resources/templates/starter-settings.gradle +++ b/initializr-generator/src/main/resources/templates/starter-settings.gradle @@ -1 +1 @@ -rootProject.name = '{{artifactId}}' \ No newline at end of file +rootProject.name = '{{artifactId}}' diff --git a/initializr-generator/src/test/java/io/spring/initializr/generator/ProjectGeneratorTests.java b/initializr-generator/src/test/java/io/spring/initializr/generator/ProjectGeneratorTests.java index 178c5cd8..eb71a710 100644 --- a/initializr-generator/src/test/java/io/spring/initializr/generator/ProjectGeneratorTests.java +++ b/initializr-generator/src/test/java/io/spring/initializr/generator/ProjectGeneratorTests.java @@ -70,6 +70,18 @@ public class ProjectGeneratorTests extends AbstractProjectGeneratorTests { verifyProjectSuccessfulEventFor(request); } + @Test + public void defaultProjectWithGradle() { + ProjectRequest request = createProjectRequest("web"); + request.setType("gradle-build"); + ProjectAssert gradleProject = generateProject(request).isGradleProject(); + gradleProject.gradleBuildAssert() + .contains("compile('org.springframework.boot:spring-boot-starter-web')") + .contains("testCompile('org.springframework.boot:spring-boot-starter-test')"); + gradleProject.gradleSettingsAssert().hasProjectName("demo"); + verifyProjectSuccessfulEventFor(request); + } + @Test public void noDependencyAddsRootStarter() { ProjectRequest request = createProjectRequest(); @@ -230,6 +242,16 @@ public class ProjectGeneratorTests extends AbstractProjectGeneratorTests { .contains("package org.acme.foo145;"); } + @Test + public void gradleProjectWithCustomArtifactId() { + ProjectRequest request = createProjectRequest(); + request.setType("gradle-build"); + request.setArtifactId("my-application"); + generateProject(request).isGradleProject().gradleSettingsAssert() + .hasProjectName("my-application"); + verifyProjectSuccessfulEventFor(request); + } + @Test public void springBoot11UseEnableAutoConfigurationJava() { ProjectRequest request = createProjectRequest("web"); diff --git a/initializr-generator/src/test/java/io/spring/initializr/test/generator/GradleSettingsAssert.java b/initializr-generator/src/test/java/io/spring/initializr/test/generator/GradleSettingsAssert.java new file mode 100644 index 00000000..86b2ebf7 --- /dev/null +++ b/initializr-generator/src/test/java/io/spring/initializr/test/generator/GradleSettingsAssert.java @@ -0,0 +1,43 @@ +/* + * Copyright 2012-2018 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 + * + * http://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.test.generator; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Very simple assertions for the gradle settings. + * + * @author Stephane Nicoll + */ +public class GradleSettingsAssert { + + private final String content; + + public GradleSettingsAssert(String content) { + this.content = content; + } + + public GradleSettingsAssert hasProjectName(String name) { + return contains(String.format("rootProject.name = '%s'", name)); + } + + public GradleSettingsAssert contains(String expression) { + assertThat(this.content).contains(expression); + return this; + } + +} diff --git a/initializr-generator/src/test/java/io/spring/initializr/test/generator/ProjectAssert.java b/initializr-generator/src/test/java/io/spring/initializr/test/generator/ProjectAssert.java index d55ea928..4fac7396 100644 --- a/initializr-generator/src/test/java/io/spring/initializr/test/generator/ProjectAssert.java +++ b/initializr-generator/src/test/java/io/spring/initializr/test/generator/ProjectAssert.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2017 the original author or authors. + * Copyright 2012-2018 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. @@ -104,6 +104,19 @@ public class ProjectAssert { } } + /** + * Return a {@link GradleSettingsAssert} for this project. + */ + public GradleSettingsAssert gradleSettingsAssert() { + try { + return new GradleSettingsAssert(StreamUtils.copyToString( + new FileInputStream(file("settings.gradle")), Charset.forName("UTF-8"))); + } + catch (IOException e) { + throw new IllegalArgumentException("Cannot resolve settings.gradle", e); + } + } + /** * Return a {@link SourceCodeAssert} for the specified source code. */