Add Gradle Kotlin DSL support

This commit refactors the existing Groovy DSL writers in order to share
code between the Groovy DSL and Kotlin DSL writers.

See gh-851
This commit is contained in:
jnizet
2019-03-03 10:53:30 +01:00
committed by Stephane Nicoll
parent 020d66be63
commit 239116b29a
51 changed files with 2262 additions and 239 deletions

View File

@@ -19,6 +19,7 @@ package io.spring.initializr.generator.spring.build;
import io.spring.initializr.generator.buildsystem.Build;
import io.spring.initializr.generator.buildsystem.DependencyScope;
import io.spring.initializr.generator.buildsystem.gradle.GradleBuildSystem;
import io.spring.initializr.generator.buildsystem.gradle.GradleKtsBuildSystem;
import io.spring.initializr.generator.buildsystem.maven.MavenBuildSystem;
import io.spring.initializr.generator.condition.ConditionalOnBuildSystem;
import io.spring.initializr.generator.condition.ConditionalOnLanguage;
@@ -39,6 +40,7 @@ import org.springframework.context.annotation.Bean;
* Project generation configuration for projects using any build system.
*
* @author Andy Wilkinson
* @author Jean-Baptiste Nizet
*/
@ProjectGenerationConfiguration
public class BuildProjectGenerationConfiguration {
@@ -70,7 +72,7 @@ public class BuildProjectGenerationConfiguration {
@Bean
@ConditionalOnLanguage(KotlinLanguage.ID)
@ConditionalOnBuildSystem(GradleBuildSystem.ID)
@ConditionalOnBuildSystem({ GradleBuildSystem.ID, GradleKtsBuildSystem.ID })
public KotlinJpaGradleBuildCustomizer kotlinJpaGradleBuildCustomizer(
InitializrMetadata metadata, KotlinProjectSettings settings) {
return new KotlinJpaGradleBuildCustomizer(metadata, settings);

View File

@@ -29,11 +29,14 @@ import io.spring.initializr.generator.io.IndentingWriterFactory;
import io.spring.initializr.generator.project.contributor.ProjectContributor;
/**
* {@link ProjectContributor} for the project's {@code build.gradle} file.
* {@link ProjectContributor} template for the project's {@code build.gradle} or
* {@code build.gradle.kts} file. A subclass exists for each DSL.
*
* @author Andy Wilkinson
* @author Jean-Baptiste Nizet
*/
public class GradleBuildProjectContributor implements BuildWriter, ProjectContributor {
public abstract class GradleBuildProjectContributor
implements BuildWriter, ProjectContributor {
private final GradleBuildWriter buildWriter;
@@ -41,21 +44,25 @@ public class GradleBuildProjectContributor implements BuildWriter, ProjectContri
private final IndentingWriterFactory indentingWriterFactory;
GradleBuildProjectContributor(GradleBuildWriter buildWriter, GradleBuild build,
IndentingWriterFactory indentingWriterFactory) {
private final String buildFileName;
protected GradleBuildProjectContributor(GradleBuildWriter buildWriter,
GradleBuild build, IndentingWriterFactory indentingWriterFactory,
String buildFileName) {
this.buildWriter = buildWriter;
this.build = build;
this.indentingWriterFactory = indentingWriterFactory;
this.buildFileName = buildFileName;
}
@Override
public void contribute(Path projectRoot) throws IOException {
Path buildGradle = Files.createFile(projectRoot.resolve("build.gradle"));
public final void contribute(Path projectRoot) throws IOException {
Path buildGradle = Files.createFile(projectRoot.resolve(this.buildFileName));
writeBuild(Files.newBufferedWriter(buildGradle));
}
@Override
public void writeBuild(Writer out) throws IOException {
public final void writeBuild(Writer out) throws IOException {
try (IndentingWriter writer = this.indentingWriterFactory
.createIndentingWriter("gradle", out)) {
this.buildWriter.writeTo(writer, this.build);

View File

@@ -23,7 +23,9 @@ import io.spring.initializr.generator.buildsystem.BuildItemResolver;
import io.spring.initializr.generator.buildsystem.gradle.Gradle3BuildWriter;
import io.spring.initializr.generator.buildsystem.gradle.GradleBuild;
import io.spring.initializr.generator.buildsystem.gradle.GradleBuildSystem;
import io.spring.initializr.generator.buildsystem.gradle.GradleBuildWriter;
import io.spring.initializr.generator.buildsystem.gradle.GradleKtsBuildSystem;
import io.spring.initializr.generator.buildsystem.gradle.GroovyDslGradleBuildWriter;
import io.spring.initializr.generator.buildsystem.gradle.KotlinDslGradleBuildWriter;
import io.spring.initializr.generator.condition.ConditionalOnBuildSystem;
import io.spring.initializr.generator.condition.ConditionalOnLanguage;
import io.spring.initializr.generator.condition.ConditionalOnPackaging;
@@ -35,6 +37,7 @@ import io.spring.initializr.generator.project.ProjectGenerationConfiguration;
import io.spring.initializr.generator.project.ResolvedProjectDescription;
import io.spring.initializr.generator.spring.build.BuildCustomizer;
import io.spring.initializr.generator.spring.util.LambdaSafe;
import io.spring.initializr.metadata.InitializrMetadata;
import org.springframework.beans.factory.ObjectProvider;
import org.springframework.context.annotation.Bean;
@@ -45,9 +48,10 @@ import org.springframework.context.annotation.Configuration;
* Gradle as its build system.
*
* @author Andy Wilkinson
* @author Jean-Baptiste Nizet
*/
@ProjectGenerationConfiguration
@ConditionalOnBuildSystem(GradleBuildSystem.ID)
@ConditionalOnBuildSystem({ GradleBuildSystem.ID, GradleKtsBuildSystem.ID })
public class GradleProjectGenerationConfiguration {
private final IndentingWriterFactory indentingWriterFactory;
@@ -100,14 +104,24 @@ public class GradleProjectGenerationConfiguration {
@Bean
@ConditionalOnPlatformVersion("2.0.0.M1")
@ConditionalOnBuildSystem(GradleBuildSystem.ID)
public BuildCustomizer<GradleBuild> applyDependencyManagementPluginContributor() {
return (build) -> build.applyPlugin("io.spring.dependency-management");
}
@Bean
@ConditionalOnBuildSystem(GradleBuildSystem.ID)
public GradleBuildProjectContributor gradleBuildProjectContributor(
GradleBuildWriter buildWriter, GradleBuild build) {
return new GradleBuildProjectContributor(buildWriter, build,
GroovyDslGradleBuildWriter buildWriter, GradleBuild build) {
return new GroovyDslGradleBuildProjectContributor(buildWriter, build,
this.indentingWriterFactory);
}
@Bean
@ConditionalOnBuildSystem(GradleKtsBuildSystem.ID)
public KotlinDslGradleBuildProjectContributor gradleKtsBuildProjectContributor(
KotlinDslGradleBuildWriter buildWriter, GradleBuild build) {
return new KotlinDslGradleBuildProjectContributor(buildWriter, build,
this.indentingWriterFactory);
}
@@ -116,6 +130,7 @@ public class GradleProjectGenerationConfiguration {
*/
@Configuration
@ConditionalOnGradleVersion("3")
@ConditionalOnBuildSystem(GradleBuildSystem.ID)
static class Gradle3ProjectGenerationConfiguration {
@Bean
@@ -152,6 +167,7 @@ public class GradleProjectGenerationConfiguration {
*/
@Configuration
@ConditionalOnGradleVersion("4")
@ConditionalOnBuildSystem(GradleBuildSystem.ID)
static class Gradle4ProjectGenerationConfiguration {
@Bean
@@ -176,21 +192,23 @@ public class GradleProjectGenerationConfiguration {
}
/**
* Configuration specific to projects using Gradle 4 or 5.
* Configuration specific to projects using Gradle (Groovy DSL) 4 or 5.
*/
@Configuration
@ConditionalOnBuildSystem(GradleBuildSystem.ID)
@ConditionalOnGradleVersion({ "4", "5" })
static class Gradle4Or5ProjectGenerationConfiguration {
@Bean
public GradleBuildWriter gradleBuildWriter() {
return new GradleBuildWriter();
public GroovyDslGradleBuildWriter gradleBuildWriter() {
return new GroovyDslGradleBuildWriter();
}
@Bean
public SettingsGradleProjectContributor settingsGradleProjectContributor(
GradleBuild build, IndentingWriterFactory indentingWriterFactory) {
return new SettingsGradleProjectContributor(build, indentingWriterFactory);
return new GroovyDslSettingsGradleProjectContributor(build,
indentingWriterFactory);
}
@Bean
@@ -207,4 +225,38 @@ public class GradleProjectGenerationConfiguration {
}
/**
* Configuration specific to projects using Gradle (Kotlin DSL).
*/
@Configuration
@ConditionalOnBuildSystem(GradleKtsBuildSystem.ID)
static class GradleKtsProjectGenerationConfiguration {
@Bean
public KotlinDslGradleBuildWriter gradleKtsBuildWriter() {
return new KotlinDslGradleBuildWriter();
}
@Bean
public KotlinDslSettingsGradleProjectContributor settingsGradleKtsProjectContributor(
GradleBuild build, IndentingWriterFactory indentingWriterFactory) {
return new KotlinDslSettingsGradleProjectContributor(build,
indentingWriterFactory);
}
@Bean
public BuildCustomizer<GradleBuild> springBootPluginContributor(
ResolvedProjectDescription projectDescription,
InitializrMetadata metadata) {
return (build) -> {
build.addPlugin("org.springframework.boot",
projectDescription.getPlatformVersion().toString());
build.addPlugin("io.spring.dependency-management",
metadata.getConfiguration().getEnv().getGradle()
.getDependencyManagementPluginVersion());
};
}
}
}

View File

@@ -0,0 +1,37 @@
/*
* 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
*
* 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.generator.spring.build.gradle;
import io.spring.initializr.generator.buildsystem.gradle.GradleBuild;
import io.spring.initializr.generator.buildsystem.gradle.GroovyDslGradleBuildWriter;
import io.spring.initializr.generator.io.IndentingWriterFactory;
import io.spring.initializr.generator.project.contributor.ProjectContributor;
/**
* {@link ProjectContributor} for the project's {@code build.gradle} file.
*
* @author Jean-Baptiste Nizet
*/
public class GroovyDslGradleBuildProjectContributor
extends GradleBuildProjectContributor {
GroovyDslGradleBuildProjectContributor(GroovyDslGradleBuildWriter buildWriter,
GradleBuild build, IndentingWriterFactory indentingWriterFactory) {
super(buildWriter, build, indentingWriterFactory, "build.gradle");
}
}

View File

@@ -0,0 +1,37 @@
/*
* 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
*
* 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.generator.spring.build.gradle;
import io.spring.initializr.generator.buildsystem.gradle.GradleBuild;
import io.spring.initializr.generator.buildsystem.gradle.GroovyDslGradleSettingsWriter;
import io.spring.initializr.generator.io.IndentingWriterFactory;
import io.spring.initializr.generator.project.contributor.ProjectContributor;
/**
* {@link ProjectContributor} for the project's {@code settings.gradle} file.
*
* @author Jean-Baptiste Nizet
*/
class GroovyDslSettingsGradleProjectContributor extends SettingsGradleProjectContributor {
GroovyDslSettingsGradleProjectContributor(GradleBuild build,
IndentingWriterFactory indentingWriterFactory) {
super(build, indentingWriterFactory, new GroovyDslGradleSettingsWriter(),
"settings.gradle");
}
}

View File

@@ -0,0 +1,37 @@
/*
* 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
*
* 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.generator.spring.build.gradle;
import io.spring.initializr.generator.buildsystem.gradle.GradleBuild;
import io.spring.initializr.generator.buildsystem.gradle.KotlinDslGradleBuildWriter;
import io.spring.initializr.generator.io.IndentingWriterFactory;
import io.spring.initializr.generator.project.contributor.ProjectContributor;
/**
* {@link ProjectContributor} for the project's {@code build.gradle.kts} file.
*
* @author Jean-Baptiste Nizet
*/
public class KotlinDslGradleBuildProjectContributor
extends GradleBuildProjectContributor {
KotlinDslGradleBuildProjectContributor(KotlinDslGradleBuildWriter buildWriter,
GradleBuild build, IndentingWriterFactory indentingWriterFactory) {
super(buildWriter, build, indentingWriterFactory, "build.gradle.kts");
}
}

View File

@@ -0,0 +1,37 @@
/*
* 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
*
* 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.generator.spring.build.gradle;
import io.spring.initializr.generator.buildsystem.gradle.GradleBuild;
import io.spring.initializr.generator.buildsystem.gradle.KotlinDslGradleSettingsWriter;
import io.spring.initializr.generator.io.IndentingWriterFactory;
import io.spring.initializr.generator.project.contributor.ProjectContributor;
/**
* {@link ProjectContributor} for the project's {@code settings.gradle.kts} file.
*
* @author Jean-Baptiste Nizet
*/
class KotlinDslSettingsGradleProjectContributor extends SettingsGradleProjectContributor {
KotlinDslSettingsGradleProjectContributor(GradleBuild build,
IndentingWriterFactory indentingWriterFactory) {
super(build, indentingWriterFactory, new KotlinDslGradleSettingsWriter(),
"settings.gradle.kts");
}
}

View File

@@ -27,11 +27,13 @@ import io.spring.initializr.generator.io.IndentingWriterFactory;
import io.spring.initializr.generator.project.contributor.ProjectContributor;
/**
* {@link ProjectContributor} for the project's {@code settings.gradle} file.
* {@link ProjectContributor} for the project's {@code settings.gradle}
* {@code settings.gradle.kts} or file. A subclass exists for each of the DSLs.
*
* @author Andy Wilkinson
* @author Jean-Baptiste Nizet
*/
class SettingsGradleProjectContributor implements ProjectContributor {
abstract class SettingsGradleProjectContributor implements ProjectContributor {
private final GradleBuild build;
@@ -39,16 +41,21 @@ class SettingsGradleProjectContributor implements ProjectContributor {
private final GradleSettingsWriter settingsWriter;
SettingsGradleProjectContributor(GradleBuild build,
IndentingWriterFactory indentingWriterFactory) {
private final String settingsFileName;
protected SettingsGradleProjectContributor(GradleBuild build,
IndentingWriterFactory indentingWriterFactory,
GradleSettingsWriter settingsWriter, String settingsFileName) {
this.build = build;
this.indentingWriterFactory = indentingWriterFactory;
this.settingsWriter = new GradleSettingsWriter();
this.settingsWriter = settingsWriter;
this.settingsFileName = settingsFileName;
}
@Override
public void contribute(Path projectRoot) throws IOException {
Path settingsGradle = Files.createFile(projectRoot.resolve("settings.gradle"));
public final void contribute(Path projectRoot) throws IOException {
Path settingsGradle = Files
.createFile(projectRoot.resolve(this.settingsFileName));
try (IndentingWriter writer = this.indentingWriterFactory.createIndentingWriter(
"gradle", Files.newBufferedWriter(settingsGradle))) {
this.settingsWriter.writeTo(writer, this.build);

View File

@@ -20,6 +20,7 @@ import java.lang.reflect.Modifier;
import io.spring.initializr.generator.buildsystem.Build;
import io.spring.initializr.generator.buildsystem.gradle.GradleBuildSystem;
import io.spring.initializr.generator.buildsystem.gradle.GradleKtsBuildSystem;
import io.spring.initializr.generator.buildsystem.maven.MavenBuildSystem;
import io.spring.initializr.generator.condition.ConditionalOnBuildSystem;
import io.spring.initializr.generator.condition.ConditionalOnPackaging;
@@ -44,6 +45,7 @@ import org.springframework.context.annotation.Configuration;
* Default Groovy language contributors.
*
* @author Stephane Nicoll
* @author Jean-Baptiste Nizet
*/
@Configuration
class GroovyProjectGenerationDefaultContributorsConfiguration {
@@ -121,7 +123,7 @@ class GroovyProjectGenerationDefaultContributorsConfiguration {
* Configuration for Groovy projects built with Gradle.
*/
@Configuration
@ConditionalOnBuildSystem(GradleBuildSystem.ID)
@ConditionalOnBuildSystem({ GradleBuildSystem.ID, GradleKtsBuildSystem.ID })
static class GroovyGradleProjectConfiguration {
@Bean

View File

@@ -0,0 +1,45 @@
/*
* 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
*
* 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.generator.spring.code.kotlin;
import java.util.stream.Collectors;
import io.spring.initializr.generator.buildsystem.gradle.GradleBuild.TaskCustomization;
import io.spring.initializr.generator.spring.build.BuildCustomizer;
/**
* {@link BuildCustomizer} for Kotlin projects build with Gradle (Groovy DSL).
*
* @author Jean-Baptiste Nizet
*/
class GroovyDslKotlinGradleBuildCustomizer extends KotlinGradleBuildCustomizer {
GroovyDslKotlinGradleBuildCustomizer(KotlinProjectSettings kotlinProjectSettings) {
super(kotlinProjectSettings);
}
@Override
protected void customizeKotlinOptions(TaskCustomization compile) {
compile.nested("kotlinOptions", (kotlinOptions) -> {
String compilerArgs = this.settings.getCompilerArgs().stream()
.map((arg) -> "'" + arg + "'").collect(Collectors.joining(", "));
kotlinOptions.set("freeCompilerArgs", "[" + compilerArgs + "]");
kotlinOptions.set("jvmTarget", "'" + this.settings.getJvmTarget() + "'");
});
}
}

View File

@@ -0,0 +1,45 @@
/*
* 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
*
* 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.generator.spring.code.kotlin;
import java.util.stream.Collectors;
import io.spring.initializr.generator.buildsystem.gradle.GradleBuild.TaskCustomization;
import io.spring.initializr.generator.spring.build.BuildCustomizer;
/**
* {@link BuildCustomizer} for Kotlin projects build with Gradle (Kotlin DSL).
*
* @author Jean-Baptiste Nizet
*/
class KotlinDslKotlinGradleBuildCustomizer extends KotlinGradleBuildCustomizer {
KotlinDslKotlinGradleBuildCustomizer(KotlinProjectSettings kotlinProjectSettings) {
super(kotlinProjectSettings);
}
@Override
protected void customizeKotlinOptions(TaskCustomization compile) {
compile.nested("kotlinOptions", (kotlinOptions) -> {
String compilerArgs = this.settings.getCompilerArgs().stream()
.map((arg) -> "\"" + arg + "\"").collect(Collectors.joining(", "));
kotlinOptions.set("freeCompilerArgs", "listOf(" + compilerArgs + ")");
kotlinOptions.set("jvmTarget", "\"" + this.settings.getJvmTarget() + "\"");
});
}
}

View File

@@ -16,41 +16,33 @@
package io.spring.initializr.generator.spring.code.kotlin;
import java.util.stream.Collectors;
import io.spring.initializr.generator.buildsystem.gradle.GradleBuild;
import io.spring.initializr.generator.buildsystem.gradle.GradleBuild.TaskCustomization;
import io.spring.initializr.generator.spring.build.BuildCustomizer;
/**
* {@link BuildCustomizer} for Kotlin projects build with Gradle.
* {@link BuildCustomizer} template for Kotlin projects build with Gradle. A subclass
* exists for each DSL.
*
* @author Andy Wilkinson
* @author Jean-Baptiste Nizet
*/
class KotlinGradleBuildCustomizer implements BuildCustomizer<GradleBuild> {
abstract class KotlinGradleBuildCustomizer implements BuildCustomizer<GradleBuild> {
private final KotlinProjectSettings settings;
protected final KotlinProjectSettings settings;
KotlinGradleBuildCustomizer(KotlinProjectSettings kotlinProjectSettings) {
this.settings = kotlinProjectSettings;
}
@Override
public void customize(GradleBuild build) {
public final void customize(GradleBuild build) {
build.addPlugin("org.jetbrains.kotlin.jvm", this.settings.getVersion());
build.addPlugin("org.jetbrains.kotlin.plugin.spring", this.settings.getVersion());
build.customizeTasksWithType("org.jetbrains.kotlin.gradle.tasks.KotlinCompile",
this::customizeKotlinOptions);
}
private void customizeKotlinOptions(TaskCustomization compile) {
compile.nested("kotlinOptions", (kotlinOptions) -> {
String compilerArgs = this.settings.getCompilerArgs().stream()
.map((arg) -> "'" + arg + "'").collect(Collectors.joining(", "));
kotlinOptions.set("freeCompilerArgs", "[" + compilerArgs + "]");
kotlinOptions.set("jvmTarget", "'" + this.settings.getJvmTarget() + "'");
});
}
protected abstract void customizeKotlinOptions(TaskCustomization compile);
}

View File

@@ -18,6 +18,7 @@ package io.spring.initializr.generator.spring.code.kotlin;
import io.spring.initializr.generator.buildsystem.Build;
import io.spring.initializr.generator.buildsystem.gradle.GradleBuildSystem;
import io.spring.initializr.generator.buildsystem.gradle.GradleKtsBuildSystem;
import io.spring.initializr.generator.buildsystem.maven.MavenBuildSystem;
import io.spring.initializr.generator.condition.ConditionalOnBuildSystem;
import io.spring.initializr.generator.condition.ConditionalOnPackaging;
@@ -47,6 +48,7 @@ import org.springframework.context.annotation.Configuration;
*
* @author Andy Wilkinson
* @author Stephane Nicoll
* @author Jean-Baptiste Nizet
*/
@Configuration
class KotlinProjectGenerationDefaultContributorsConfiguration {
@@ -155,7 +157,7 @@ class KotlinProjectGenerationDefaultContributorsConfiguration {
}
/**
* Configuration for Kotlin projects built with Gradle.
* Configuration for Kotlin projects built with Gradle (Groovy DSL).
*
* @author Andy Wilkinson
*/
@@ -166,7 +168,24 @@ class KotlinProjectGenerationDefaultContributorsConfiguration {
@Bean
public KotlinGradleBuildCustomizer kotlinBuildCustomizer(
KotlinProjectSettings kotlinProjectSettings) {
return new KotlinGradleBuildCustomizer(kotlinProjectSettings);
return new GroovyDslKotlinGradleBuildCustomizer(kotlinProjectSettings);
}
}
/**
* Configuration for Kotlin projects built with Gradle (Kotlin DSL).
*
* @author Jean-Baptiste Nizet
*/
@Configuration
@ConditionalOnBuildSystem(GradleKtsBuildSystem.ID)
static class KotlinGradleKtsProjectConfiguration {
@Bean
public KotlinDslKotlinGradleBuildCustomizer kotlinBuildCustomizer(
KotlinProjectSettings kotlinProjectSettings) {
return new KotlinDslKotlinGradleBuildCustomizer(kotlinProjectSettings);
}
}

View File

@@ -17,6 +17,7 @@
package io.spring.initializr.generator.spring.scm.git;
import io.spring.initializr.generator.buildsystem.gradle.GradleBuildSystem;
import io.spring.initializr.generator.buildsystem.gradle.GradleKtsBuildSystem;
import io.spring.initializr.generator.buildsystem.maven.MavenBuildSystem;
import io.spring.initializr.generator.condition.ConditionalOnBuildSystem;
import io.spring.initializr.generator.project.ProjectGenerationConfiguration;
@@ -56,7 +57,7 @@ public class GitProjectGenerationConfiguration {
}
@Bean
@ConditionalOnBuildSystem(GradleBuildSystem.ID)
@ConditionalOnBuildSystem({ GradleBuildSystem.ID, GradleKtsBuildSystem.ID })
public GitIgnoreCustomizer gradleGitIgnoreCustomizer() {
return (gitIgnore) -> {
gitIgnore.getGeneral().add(".gradle", "/build/",

View File

@@ -20,6 +20,7 @@ import java.util.stream.Stream;
import io.spring.initializr.generator.buildsystem.BuildSystem;
import io.spring.initializr.generator.buildsystem.gradle.GradleBuildSystem;
import io.spring.initializr.generator.buildsystem.gradle.GradleKtsBuildSystem;
import io.spring.initializr.generator.buildsystem.maven.MavenBuildSystem;
import io.spring.initializr.generator.language.Language;
import io.spring.initializr.generator.language.groovy.GroovyLanguage;
@@ -45,6 +46,7 @@ import org.springframework.core.io.ClassPathResource;
* Build compliance tests.
*
* @author Stephane Nicoll
* @author Jean-Baptiste Nizet
*/
class BuildComplianceTests extends AbstractComplianceTests {
@@ -54,13 +56,19 @@ class BuildComplianceTests extends AbstractComplianceTests {
private static final Language kotlin = new KotlinLanguage();
static Stream<Arguments> parameters() {
static Stream<Arguments> previousGenerationParameters() {
return Stream.of(
Arguments.arguments(BuildSystem.forId(MavenBuildSystem.ID), "pom.xml"),
Arguments.arguments(BuildSystem.forId(GradleBuildSystem.ID),
"build.gradle"));
}
static Stream<Arguments> parameters() {
return Stream.concat(previousGenerationParameters(),
Stream.of(Arguments.arguments(BuildSystem.forId(GradleKtsBuildSystem.ID),
"build.gradle.kts")));
}
@ParameterizedTest
@MethodSource("parameters")
void currentGenerationJarJava(BuildSystem build, String fileName) {
@@ -117,19 +125,19 @@ class BuildComplianceTests extends AbstractComplianceTests {
}
@ParameterizedTest
@MethodSource("parameters")
@MethodSource("previousGenerationParameters")
void previousGenerationJarJava(BuildSystem build, String fileName) {
testPreviousGenerationJar(java, build, fileName);
}
@ParameterizedTest
@MethodSource("parameters")
@MethodSource("previousGenerationParameters")
void previousGenerationJarGroovy(BuildSystem build, String fileName) {
testPreviousGenerationJar(groovy, build, fileName);
}
@ParameterizedTest
@MethodSource("parameters")
@MethodSource("previousGenerationParameters")
void previousGenerationJarKotlin(BuildSystem build, String fileName) {
testPreviousGenerationJar(kotlin, build, fileName);
}

View File

@@ -0,0 +1,163 @@
/*
* 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
*
* 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.generator.spring.build.gradle;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.List;
import java.util.stream.Stream;
import io.spring.initializr.generator.buildsystem.Dependency;
import io.spring.initializr.generator.buildsystem.DependencyScope;
import io.spring.initializr.generator.buildsystem.gradle.GradleKtsBuildSystem;
import io.spring.initializr.generator.language.java.JavaLanguage;
import io.spring.initializr.generator.packaging.war.WarPackaging;
import io.spring.initializr.generator.project.ProjectDescription;
import io.spring.initializr.generator.spring.build.BuildProjectGenerationConfiguration;
import io.spring.initializr.generator.spring.build.BuildWriter;
import io.spring.initializr.generator.spring.test.InitializrMetadataTestBuilder;
import io.spring.initializr.generator.test.project.ProjectAssetTester;
import io.spring.initializr.generator.test.project.ProjectStructure;
import io.spring.initializr.generator.version.Version;
import io.spring.initializr.metadata.InitializrMetadata;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.io.TempDir;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.MethodSource;
import org.springframework.util.StreamUtils;
import static org.assertj.core.api.Assertions.assertThat;
/**
* Tests for {@link GradleProjectGenerationConfiguration} with Kotlin DSL build system.
*
* @author Jean-Baptiste Nizet
*/
class GradleKtsProjectGenerationConfigurationTests {
private ProjectAssetTester projectTester;
@BeforeEach
void setup(@TempDir Path directory) {
this.projectTester = new ProjectAssetTester().withIndentingWriterFactory()
.withConfiguration(BuildProjectGenerationConfiguration.class,
GradleProjectGenerationConfiguration.class)
.withDirectory(directory)
.withBean(InitializrMetadata.class,
() -> InitializrMetadataTestBuilder.withDefaults().build())
.withDescriptionCustomizer((description) -> description
.setBuildSystem(new GradleKtsBuildSystem()));
}
static Stream<Arguments> supportedPlatformVersions() {
// previous versions use gradle < 5, where Kotlin DSL is not supported
return Stream.of(Arguments.arguments("2.1.3.RELEASE"));
}
@ParameterizedTest(name = "Spring Boot {0}")
@MethodSource("supportedPlatformVersions")
void buildWriterIsContributed(String platformVersion) {
ProjectDescription description = new ProjectDescription();
description.setPlatformVersion(Version.parse(platformVersion));
description.setLanguage(new JavaLanguage());
BuildWriter buildWriter = this.projectTester.generate(description,
(context) -> context.getBean(BuildWriter.class));
assertThat(buildWriter)
.isInstanceOf(KotlinDslGradleBuildProjectContributor.class);
}
static Stream<Arguments> gradleWrapperParameters() {
return Stream.of(Arguments.arguments("2.1.3.RELEASE", "5.2.1"));
}
@ParameterizedTest(name = "Spring Boot {0}")
@MethodSource("gradleWrapperParameters")
void gradleWrapperIsContributedWhenGeneratingGradleKtsProject(String platformVersion,
String expectedGradleVersion) throws IOException {
ProjectDescription description = new ProjectDescription();
description.setPlatformVersion(Version.parse(platformVersion));
description.setLanguage(new JavaLanguage());
ProjectStructure projectStructure = this.projectTester.generate(description);
List<String> relativePaths = projectStructure.getRelativePathsOfProjectFiles();
assertThat(relativePaths).contains("gradlew", "gradlew.bat",
"gradle/wrapper/gradle-wrapper.properties",
"gradle/wrapper/gradle-wrapper.jar");
try (Stream<String> lines = Files.lines(
projectStructure.resolve("gradle/wrapper/gradle-wrapper.properties"))) {
assertThat(lines.filter((line) -> line
.contains(String.format("gradle-%s-bin.zip", expectedGradleVersion))))
.hasSize(1);
}
}
@Test
void buildDotGradleDotKtsIsContributedWhenGeneratingGradleKtsProject()
throws IOException {
ProjectDescription description = new ProjectDescription();
description.setPlatformVersion(Version.parse("2.1.0.RELEASE"));
description.setLanguage(new JavaLanguage("11"));
description.addDependency("acme",
new Dependency("com.example", "acme", DependencyScope.COMPILE));
ProjectStructure projectStructure = this.projectTester.generate(description);
List<String> relativePaths = projectStructure.getRelativePathsOfProjectFiles();
assertThat(relativePaths).contains("build.gradle.kts");
Path path = projectStructure.resolve("build.gradle.kts");
String[] lines = readAllLines(path);
assertThat(lines).containsExactly("plugins {",
" id(\"org.springframework.boot\") version \"2.1.0.RELEASE\"",
" id(\"io.spring.dependency-management\") version \"1.0.6.RELEASE\"",
" java", "}", "", "group = \"com.example\"",
"version = \"0.0.1-SNAPSHOT\"",
"java.sourceCompatibility = JavaVersion.VERSION_11", "", "repositories {",
" mavenCentral()", "}", "", "dependencies {",
" implementation(\"org.springframework.boot:spring-boot-starter\")",
" implementation(\"com.example:acme\")",
" testImplementation(\"org.springframework.boot:spring-boot-starter-test\")",
"}");
}
@Test
void warPluginIsAppliedWhenBuildingProjectThatUsesWarPackaging() throws IOException {
ProjectDescription description = new ProjectDescription();
description.setPlatformVersion(Version.parse("2.1.0.RELEASE"));
description.setLanguage(new JavaLanguage());
description.setPackaging(new WarPackaging());
ProjectStructure projectStructure = this.projectTester.generate(description);
List<String> relativePaths = projectStructure.getRelativePathsOfProjectFiles();
assertThat(relativePaths).contains("build.gradle.kts");
try (Stream<String> lines = Files
.lines(projectStructure.resolve("build.gradle.kts"))) {
assertThat(lines.filter((line) -> line.contains(" war"))).hasSize(1);
}
}
private static String[] readAllLines(Path file) throws IOException {
String content = StreamUtils.copyToString(
new FileInputStream(new File(file.toString())), StandardCharsets.UTF_8);
String[] lines = content.split("\\r?\\n");
assertThat(content).endsWith(System.lineSeparator());
return lines;
}
}

View File

@@ -46,9 +46,10 @@ import org.junit.jupiter.params.provider.MethodSource;
import static org.assertj.core.api.Assertions.assertThat;
/**
* Tests for {@link GradleProjectGenerationConfiguration}.
* Tests for {@link GradleProjectGenerationConfiguration} with Groovy DSL build system.
*
* @author Stephane Nicoll
* @author Jean-Baptiste Nizet
*/
class GradleProjectGenerationConfigurationTests {
@@ -81,6 +82,8 @@ class GradleProjectGenerationConfigurationTests {
BuildWriter buildWriter = this.projectTester.generate(description,
(context) -> context.getBean(BuildWriter.class));
assertThat(buildWriter).isInstanceOf(GradleBuildProjectContributor.class);
assertThat(buildWriter)
.isNotInstanceOf(KotlinDslGradleBuildProjectContributor.class);
}
static Stream<Arguments> gradleWrapperParameters() {

View File

@@ -22,7 +22,7 @@ import java.nio.file.Path;
import java.util.List;
import io.spring.initializr.generator.buildsystem.gradle.GradleBuild;
import io.spring.initializr.generator.buildsystem.gradle.GradleBuildWriter;
import io.spring.initializr.generator.buildsystem.gradle.GroovyDslGradleBuildWriter;
import io.spring.initializr.generator.io.IndentingWriterFactory;
import io.spring.initializr.generator.io.SimpleIndentStrategy;
import io.spring.initializr.generator.test.io.TextTestUtils;
@@ -32,19 +32,21 @@ import org.junit.jupiter.api.io.TempDir;
import static org.assertj.core.api.Assertions.assertThat;
/**
* Tests for {@link GradleBuildProjectContributor}.
* Tests for {@link GroovyDslGradleBuildProjectContributor}.
*
* @author Andy Wilkinson
* @author Stephane Nicoll
* @author Jean-Baptiste Nizet
*/
class GradleBuildProjectContributorTests {
class GroovyDslGradleBuildProjectContributorTests {
@Test
void gradleBuildIsContributedInProjectStructure(@TempDir Path projectDir)
throws IOException {
GradleBuild build = new GradleBuild();
new GradleBuildProjectContributor(new GradleBuildWriter(), build,
IndentingWriterFactory.withDefaultSettings()).contribute(projectDir);
new GroovyDslGradleBuildProjectContributor(new GroovyDslGradleBuildWriter(),
build, IndentingWriterFactory.withDefaultSettings())
.contribute(projectDir);
Path buildGradle = projectDir.resolve("build.gradle");
assertThat(buildGradle).isRegularFile();
}
@@ -81,8 +83,8 @@ class GradleBuildProjectContributorTests {
private List<String> generateBuild(GradleBuild build,
IndentingWriterFactory indentingWriterFactory) throws IOException {
StringWriter writer = new StringWriter();
new GradleBuildProjectContributor(new GradleBuildWriter(), build,
indentingWriterFactory).writeBuild(writer);
new GroovyDslGradleBuildProjectContributor(new GroovyDslGradleBuildWriter(),
build, indentingWriterFactory).writeBuild(writer);
return TextTestUtils.readAllLines(writer.toString());
}

View File

@@ -31,11 +31,12 @@ import org.junit.jupiter.api.io.TempDir;
import static org.assertj.core.api.Assertions.assertThat;
/**
* Tests for {@link SettingsGradleProjectContributor}.
* Tests for {@link GroovyDslSettingsGradleProjectContributor}.
*
* @author Andy Wilkinson
* @author Jean-Baptiste Nizet
*/
class SettingsGradleProjectContributorTests {
class GroovyDslSettingsGradleProjectContributorTests {
@TempDir
Path directory;
@@ -77,7 +78,7 @@ class SettingsGradleProjectContributorTests {
private List<String> generateSettings(GradleBuild build,
IndentingWriterFactory indentingWriterFactory) throws IOException {
Path projectDir = Files.createTempDirectory(this.directory, "project-");
new SettingsGradleProjectContributor(build, indentingWriterFactory)
new GroovyDslSettingsGradleProjectContributor(build, indentingWriterFactory)
.contribute(projectDir);
return new ProjectStructure(projectDir).readAllLines("settings.gradle");
}

View File

@@ -0,0 +1,85 @@
/*
* 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
*
* 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.generator.spring.build.gradle;
import java.io.IOException;
import java.io.StringWriter;
import java.nio.file.Path;
import java.util.Arrays;
import java.util.List;
import io.spring.initializr.generator.buildsystem.gradle.GradleBuild;
import io.spring.initializr.generator.buildsystem.gradle.KotlinDslGradleBuildWriter;
import io.spring.initializr.generator.io.IndentingWriterFactory;
import io.spring.initializr.generator.io.SimpleIndentStrategy;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.io.TempDir;
import static org.assertj.core.api.Assertions.assertThat;
/**
* Tests for {@link KotlinDslGradleBuildProjectContributor}.
*
* @author Jean-Baptiste Nizet
*/
class KotlinDslGradleBuildProjectContributorTests {
@Test
void gradleBuildIsContributedInProjectStructure(@TempDir Path projectDir)
throws IOException {
GradleBuild build = new GradleBuild();
new KotlinDslGradleBuildProjectContributor(new KotlinDslGradleBuildWriter(),
build, IndentingWriterFactory.withDefaultSettings())
.contribute(projectDir);
Path buildGradleKts = projectDir.resolve("build.gradle.kts");
assertThat(buildGradleKts).isRegularFile();
}
@Test
void gradleBuildIsContributedToProject() throws IOException {
GradleBuild build = new GradleBuild();
build.setGroup("com.example");
build.setVersion("1.0.0-SNAPSHOT");
List<String> lines = generateBuild(build);
assertThat(lines).containsSequence("group = \"com.example\"",
"version = \"1.0.0-SNAPSHOT\"");
}
@Test
void gradleBuildIsContributedUsingGradleContentId() throws IOException {
IndentingWriterFactory indentingWriterFactory = IndentingWriterFactory
.create(new SimpleIndentStrategy(" "), (factory) -> factory
.indentingStrategy("gradle", new SimpleIndentStrategy(" ")));
GradleBuild build = new GradleBuild();
build.addPlugin("java");
List<String> lines = generateBuild(build, indentingWriterFactory);
assertThat(lines).containsSequence("plugins {", " java", "}");
}
private List<String> generateBuild(GradleBuild build) throws IOException {
return generateBuild(build, IndentingWriterFactory.withDefaultSettings());
}
private List<String> generateBuild(GradleBuild build,
IndentingWriterFactory indentingWriterFactory) throws IOException {
StringWriter writer = new StringWriter();
new KotlinDslGradleBuildProjectContributor(new KotlinDslGradleBuildWriter(),
build, indentingWriterFactory).writeBuild(writer);
return Arrays.asList(writer.toString().split("\\r?\\n"));
}
}

View File

@@ -0,0 +1,86 @@
/*
* 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
*
* 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.generator.spring.build.gradle;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.List;
import io.spring.initializr.generator.buildsystem.gradle.GradleBuild;
import io.spring.initializr.generator.io.IndentingWriterFactory;
import io.spring.initializr.generator.io.SimpleIndentStrategy;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.io.TempDir;
import static org.assertj.core.api.Assertions.assertThat;
/**
* Tests for {@link KotlinDslSettingsGradleProjectContributor}.
*
* @author Jean-Baptiste Nizet
*/
class KotlinDslSettingsGradleProjectContributorTests {
@TempDir
Path directory;
@Test
void gradleSettingsIsContributedToProject() throws IOException {
GradleBuild build = new GradleBuild();
build.pluginRepositories().add("maven-central");
List<String> lines = generateSettings(build);
assertThat(lines).containsSequence("pluginManagement {", " repositories {",
" mavenCentral()", " gradlePluginPortal()", " }", "}");
}
@Test
void gradleSettingsIsContributedUsingGradleContentId() throws IOException {
IndentingWriterFactory indentingWriterFactory = IndentingWriterFactory
.create(new SimpleIndentStrategy(" "), (factory) -> factory
.indentingStrategy("gradle", new SimpleIndentStrategy(" ")));
GradleBuild build = new GradleBuild();
build.pluginRepositories().add("maven-central");
List<String> lines = generateSettings(build, indentingWriterFactory);
assertThat(lines).containsSequence("pluginManagement {", " repositories {",
" mavenCentral()", " gradlePluginPortal()", " }", "}");
}
@Test
void gradleSettingsDoesNotUseRepositories() throws IOException {
GradleBuild build = new GradleBuild();
build.repositories().add("maven-central");
List<String> lines = generateSettings(build);
assertThat(lines).containsSequence("pluginManagement {", " repositories {",
" gradlePluginPortal()", " }", "}");
}
private List<String> generateSettings(GradleBuild build) throws IOException {
return generateSettings(build, IndentingWriterFactory.withDefaultSettings());
}
private List<String> generateSettings(GradleBuild build,
IndentingWriterFactory indentingWriterFactory) throws IOException {
Path projectDir = Files.createTempDirectory(this.directory, "project-");
new KotlinDslSettingsGradleProjectContributor(build, indentingWriterFactory)
.contribute(projectDir);
Path settingsGradle = projectDir.resolve("settings.gradle.kts");
assertThat(settingsGradle).isRegularFile();
return Files.readAllLines(settingsGradle);
}
}

View File

@@ -0,0 +1,73 @@
/*
* 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
*
* 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.generator.spring.code.kotlin;
import io.spring.initializr.generator.buildsystem.gradle.GradleBuild;
import io.spring.initializr.generator.buildsystem.gradle.GradleBuild.TaskCustomization;
import org.junit.jupiter.api.Test;
import static org.assertj.core.api.Assertions.assertThat;
/**
* Tests for {@link GroovyDslKotlinGradleBuildCustomizer}.
*
* @author Andy Wilkinson <<<<<<<
* HEAD:initializr-generator-spring/src/test/java/io/spring/initializr/generator/spring/code/kotlin/KotlinGradleBuildCustomizerTests.java
* @author Jean-Baptiste Nizet ======= >>>>>>> 7ec6a29a... Configure spring project
* generation using Gradle Kotlin
* DSL:initializr-generator-spring/src/test/java/io/spring/initializr/generator/spring/code/kotlin/GroovyDslKotlinGradleBuildCustomizerTests.java
*/
class GroovyDslKotlinGradleBuildCustomizerTests {
@Test
void kotlinPluginsAreConfigured() {
GradleBuild build = new GradleBuild();
new GroovyDslKotlinGradleBuildCustomizer(
new SimpleKotlinProjectSettings("1.2.70")).customize(build);
assertThat(build.getPlugins()).hasSize(2);
assertThat(build.getPlugins().get(0).getId())
.isEqualTo("org.jetbrains.kotlin.jvm");
assertThat(build.getPlugins().get(0).getVersion()).isEqualTo("1.2.70");
assertThat(build.getPlugins().get(1).getId())
.isEqualTo("org.jetbrains.kotlin.plugin.spring");
assertThat(build.getPlugins().get(1).getVersion()).isEqualTo("1.2.70");
}
@Test
void kotlinCompilationTasksAreCustomized() {
GradleBuild build = new GradleBuild();
new GroovyDslKotlinGradleBuildCustomizer(
new SimpleKotlinProjectSettings("1.2.70")).customize(build);
assertThat(build.getTasksWithTypeCustomizations()).hasSize(1);
assertThat(build.getTasksWithTypeCustomizations()).containsKeys("KotlinCompile");
assertKotlinOptions(build.getTasksWithTypeCustomizations().get("KotlinCompile"));
}
private void assertKotlinOptions(TaskCustomization compileTask) {
assertThat(compileTask.getAssignments()).isEmpty();
assertThat(compileTask.getInvocations()).isEmpty();
assertThat(compileTask.getNested()).hasSize(1);
TaskCustomization kotlinOptions = compileTask.getNested().get("kotlinOptions");
assertThat(kotlinOptions.getInvocations()).hasSize(0);
assertThat(kotlinOptions.getNested()).hasSize(0);
assertThat(kotlinOptions.getAssignments()).hasSize(2);
assertThat(kotlinOptions.getAssignments())
.containsEntry("freeCompilerArgs", "['-Xjsr305=strict']")
.containsEntry("jvmTarget", "'1.8'");
}
}

View File

@@ -23,17 +23,17 @@ import org.junit.jupiter.api.Test;
import static org.assertj.core.api.Assertions.assertThat;
/**
* Tests for {@link KotlinGradleBuildCustomizer}.
* Tests for {@link KotlinDslKotlinGradleBuildCustomizer}.
*
* @author Andy Wilkinson
* @author Jean-Baptiste Nizet
*/
class KotlinGradleBuildCustomizerTests {
class KotlinDslKotlinGradleBuildCustomizerTests {
@Test
void kotlinPluginsAreConfigured() {
GradleBuild build = new GradleBuild();
new KotlinGradleBuildCustomizer(new SimpleKotlinProjectSettings("1.2.70"))
.customize(build);
new KotlinDslKotlinGradleBuildCustomizer(
new SimpleKotlinProjectSettings("1.2.70")).customize(build);
assertThat(build.getPlugins()).hasSize(2);
assertThat(build.getPlugins().get(0).getId())
.isEqualTo("org.jetbrains.kotlin.jvm");
@@ -46,10 +46,8 @@ class KotlinGradleBuildCustomizerTests {
@Test
void kotlinCompilationTasksAreCustomized() {
GradleBuild build = new GradleBuild();
new KotlinGradleBuildCustomizer(new SimpleKotlinProjectSettings("1.2.70"))
.customize(build);
assertThat(build.getImportedTypes())
.contains("org.jetbrains.kotlin.gradle.tasks.KotlinCompile");
new KotlinDslKotlinGradleBuildCustomizer(
new SimpleKotlinProjectSettings("1.2.70")).customize(build);
assertThat(build.getTasksWithTypeCustomizations()).hasSize(1);
assertThat(build.getTasksWithTypeCustomizations()).containsKeys("KotlinCompile");
assertKotlinOptions(build.getTasksWithTypeCustomizations().get("KotlinCompile"));
@@ -64,8 +62,8 @@ class KotlinGradleBuildCustomizerTests {
assertThat(kotlinOptions.getNested()).hasSize(0);
assertThat(kotlinOptions.getAssignments()).hasSize(2);
assertThat(kotlinOptions.getAssignments())
.containsEntry("freeCompilerArgs", "['-Xjsr305=strict']")
.containsEntry("jvmTarget", "'1.8'");
.containsEntry("freeCompilerArgs", "listOf(\"-Xjsr305=strict\")")
.containsEntry("jvmTarget", "\"1.8\"");
}
}

View File

@@ -80,7 +80,7 @@ public class InitializrMetadataTestBuilder {
}
public InitializrMetadataTestBuilder addAllDefaults() {
return addBasicDefaults().setGradleEnv("0.5.1.RELEASE").setKotlinEnv("1.1.1");
return addBasicDefaults().setGradleEnv("1.0.6.RELEASE").setKotlinEnv("1.1.1");
}
public InitializrMetadataTestBuilder addBasicDefaults() {

View File

@@ -0,0 +1,26 @@
plugins {
id("org.springframework.boot") version "2.1.1.RELEASE"
id("io.spring.dependency-management") version "1.0.6.RELEASE"
java
}
group = "com.example"
version = "0.0.1-SNAPSHOT"
java.sourceCompatibility = JavaVersion.VERSION_1_8
configurations {
compileOnly {
extendsFrom(configurations.annotationProcessor.get())
}
}
repositories {
mavenCentral()
}
dependencies {
implementation("org.springframework.boot:spring-boot-starter-data-jpa")
implementation("org.springframework.boot:spring-boot-starter-web")
annotationProcessor("org.springframework.boot:spring-boot-configuration-processor")
testImplementation("org.springframework.boot:spring-boot-starter-test")
}

View File

@@ -0,0 +1,26 @@
plugins {
id("org.springframework.boot") version "2.1.1.RELEASE"
id("io.spring.dependency-management") version "1.0.6.RELEASE"
java
}
group = "com.example"
version = "0.0.1-SNAPSHOT"
java.sourceCompatibility = JavaVersion.VERSION_1_8
repositories {
mavenCentral()
}
dependencies {
implementation("org.acme:foo")
testImplementation("org.springframework.boot:spring-boot-starter-test")
}
dependencyManagement {
imports {
mavenBom("org.acme:bar-bom:1.0")
mavenBom("org.acme:biz-bom:1.0")
mavenBom("org.acme:foo-bom:1.0")
}
}

View File

@@ -0,0 +1,26 @@
plugins {
id("org.springframework.boot") version "2.1.1.RELEASE"
id("io.spring.dependency-management") version "1.0.6.RELEASE"
java
}
group = "com.example"
version = "0.0.1-SNAPSHOT"
java.sourceCompatibility = JavaVersion.VERSION_1_8
repositories {
mavenCentral()
}
extra["fooVersion"] = "1.3.3"
dependencies {
implementation("org.acme:foo")
testImplementation("org.springframework.boot:spring-boot-starter-test")
}
dependencyManagement {
imports {
mavenBom("org.acme:foo-bom:${fooVersion}")
}
}

View File

@@ -0,0 +1,20 @@
plugins {
id("org.springframework.boot") version "2.1.1.RELEASE"
id("io.spring.dependency-management") version "1.0.6.RELEASE"
java
}
group = "com.example"
version = "0.0.1-SNAPSHOT"
java.sourceCompatibility = JavaVersion.VERSION_1_8
repositories {
mavenCentral()
}
dependencies {
implementation("org.springframework.boot:spring-boot-starter-data-jpa")
implementation("org.springframework.boot:spring-boot-starter-web")
compileOnly("org.acme:foo")
testImplementation("org.springframework.boot:spring-boot-starter-test")
}

View File

@@ -0,0 +1,26 @@
.gradle
/build/
!gradle/wrapper/gradle-wrapper.jar
### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
/out/
### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/

View File

@@ -0,0 +1,30 @@
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"
kotlin("jvm") version "1.1.1"
kotlin("plugin.spring") version "1.1.1"
}
group = "com.example"
version = "0.0.1-SNAPSHOT"
java.sourceCompatibility = JavaVersion.VERSION_11
repositories {
mavenCentral()
}
dependencies {
implementation("org.springframework.boot:spring-boot-starter")
implementation("org.jetbrains.kotlin:kotlin-reflect")
implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
testImplementation("org.springframework.boot:spring-boot-starter-test")
}
tasks.withType<KotlinCompile> {
kotlinOptions {
freeCompilerArgs = listOf("-Xjsr305=strict")
jvmTarget = "1.8"
}
}

View File

@@ -0,0 +1,21 @@
plugins {
id("org.springframework.boot") version "2.1.1.RELEASE"
id("io.spring.dependency-management") version "1.0.6.RELEASE"
java
}
group = "com.example"
version = "0.0.1-SNAPSHOT"
java.sourceCompatibility = JavaVersion.VERSION_1_8
repositories {
mavenCentral()
maven { url = uri("https://example.com/foo") }
maven { url = uri("https://example.com/bar") }
}
dependencies {
implementation("org.acme:bar")
implementation("org.acme:foo")
testImplementation("org.springframework.boot:spring-boot-starter-test")
}

View File

@@ -0,0 +1,20 @@
plugins {
id("org.springframework.boot") version "2.2.0.M1"
id("io.spring.dependency-management") version "1.0.6.RELEASE"
java
}
group = "com.example"
version = "0.0.1-SNAPSHOT"
java.sourceCompatibility = JavaVersion.VERSION_1_8
repositories {
mavenCentral()
maven { url = uri("https://repo.spring.io/snapshot") }
maven { url = uri("https://repo.spring.io/milestone") }
}
dependencies {
implementation("org.acme:foo")
testImplementation("org.springframework.boot:spring-boot-starter-test")
}

View File

@@ -0,0 +1,21 @@
plugins {
id("org.springframework.boot") version "2.1.1.RELEASE"
id("io.spring.dependency-management") version "1.0.6.RELEASE"
java
}
group = "com.example"
version = "0.0.1-SNAPSHOT"
java.sourceCompatibility = JavaVersion.VERSION_1_8
repositories {
mavenCentral()
}
extra["springBarVersion"] = "0.2.0.RELEASE"
extra["spring-foo.version"] = "0.1.0.RELEASE"
dependencies {
implementation("org.springframework.boot:spring-boot-starter-web")
testImplementation("org.springframework.boot:spring-boot-starter-test")
}

View File

@@ -0,0 +1,19 @@
plugins {
id("org.springframework.boot") version "2.1.1.RELEASE"
id("io.spring.dependency-management") version "1.0.6.RELEASE"
groovy
}
group = "com.example"
version = "0.0.1-SNAPSHOT"
java.sourceCompatibility = JavaVersion.VERSION_1_8
repositories {
mavenCentral()
}
dependencies {
implementation("org.springframework.boot:spring-boot-starter")
implementation("org.codehaus.groovy:groovy")
testImplementation("org.springframework.boot:spring-boot-starter-test")
}

View File

@@ -0,0 +1,21 @@
plugins {
id("org.springframework.boot") version "2.1.1.RELEASE"
id("io.spring.dependency-management") version "1.0.6.RELEASE"
war
groovy
}
group = "com.example"
version = "0.0.1-SNAPSHOT"
java.sourceCompatibility = JavaVersion.VERSION_1_8
repositories {
mavenCentral()
}
dependencies {
implementation("org.springframework.boot:spring-boot-starter-web")
implementation("org.codehaus.groovy:groovy")
providedRuntime("org.springframework.boot:spring-boot-starter-tomcat")
testImplementation("org.springframework.boot:spring-boot-starter-test")
}

View File

@@ -0,0 +1,18 @@
plugins {
id("org.springframework.boot") version "2.1.1.RELEASE"
id("io.spring.dependency-management") version "1.0.6.RELEASE"
java
}
group = "com.example"
version = "0.0.1-SNAPSHOT"
java.sourceCompatibility = JavaVersion.VERSION_1_8
repositories {
mavenCentral()
}
dependencies {
implementation("org.springframework.boot:spring-boot-starter")
testImplementation("org.springframework.boot:spring-boot-starter-test")
}

View File

@@ -0,0 +1,20 @@
plugins {
id("org.springframework.boot") version "2.1.1.RELEASE"
id("io.spring.dependency-management") version "1.0.6.RELEASE"
java
war
}
group = "com.example"
version = "0.0.1-SNAPSHOT"
java.sourceCompatibility = JavaVersion.VERSION_1_8
repositories {
mavenCentral()
}
dependencies {
implementation("org.springframework.boot:spring-boot-starter-web")
providedRuntime("org.springframework.boot:spring-boot-starter-tomcat")
testImplementation("org.springframework.boot:spring-boot-starter-test")
}

View File

@@ -0,0 +1,30 @@
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"
kotlin("jvm") version "1.1.1"
kotlin("plugin.spring") version "1.1.1"
}
group = "com.example"
version = "0.0.1-SNAPSHOT"
java.sourceCompatibility = JavaVersion.VERSION_1_8
repositories {
mavenCentral()
}
dependencies {
implementation("org.springframework.boot:spring-boot-starter")
implementation("org.jetbrains.kotlin:kotlin-reflect")
implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
testImplementation("org.springframework.boot:spring-boot-starter-test")
}
tasks.withType<KotlinCompile> {
kotlinOptions {
freeCompilerArgs = listOf("-Xjsr305=strict")
jvmTarget = "1.8"
}
}

View File

@@ -0,0 +1,32 @@
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"
war
kotlin("jvm") version "1.1.1"
kotlin("plugin.spring") version "1.1.1"
}
group = "com.example"
version = "0.0.1-SNAPSHOT"
java.sourceCompatibility = JavaVersion.VERSION_1_8
repositories {
mavenCentral()
}
dependencies {
implementation("org.springframework.boot:spring-boot-starter-web")
implementation("org.jetbrains.kotlin:kotlin-reflect")
implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
providedRuntime("org.springframework.boot:spring-boot-starter-tomcat")
testImplementation("org.springframework.boot:spring-boot-starter-test")
}
tasks.withType<KotlinCompile> {
kotlinOptions {
freeCompilerArgs = listOf("-Xjsr305=strict")
jvmTarget = "1.8"
}
}