diff --git a/initializr-generator-spring/src/main/java/io/spring/initializr/generator/spring/code/kotlin/KotlinMavenBuildCustomizer.java b/initializr-generator-spring/src/main/java/io/spring/initializr/generator/spring/code/kotlin/KotlinMavenBuildCustomizer.java index 2865cd66..0bd50967 100644 --- a/initializr-generator-spring/src/main/java/io/spring/initializr/generator/spring/code/kotlin/KotlinMavenBuildCustomizer.java +++ b/initializr-generator-spring/src/main/java/io/spring/initializr/generator/spring/code/kotlin/KotlinMavenBuildCustomizer.java @@ -20,6 +20,8 @@ import io.spring.initializr.generator.buildsystem.Dependency; import io.spring.initializr.generator.buildsystem.DependencyScope; import io.spring.initializr.generator.buildsystem.maven.MavenBuild; import io.spring.initializr.generator.spring.build.BuildCustomizer; +import io.spring.initializr.generator.version.Version; +import io.spring.initializr.generator.version.VersionRange; /** * {@link BuildCustomizer} for Kotlin projects build with Maven when Kotlin is supported @@ -32,6 +34,8 @@ import io.spring.initializr.generator.spring.build.BuildCustomizer; */ class KotlinMavenBuildCustomizer implements BuildCustomizer { + private static final VersionRange KOTLIN_ONE_EIGHT_OR_LATER = new VersionRange(Version.parse("1.8.0")); + private final KotlinProjectSettings settings; KotlinMavenBuildCustomizer(KotlinProjectSettings kotlinProjectSettings) { @@ -52,8 +56,11 @@ class KotlinMavenBuildCustomizer implements BuildCustomizer { }); kotlinMavenPlugin.dependency("org.jetbrains.kotlin", "kotlin-maven-allopen", "${kotlin.version}"); }); - build.dependencies().add("kotlin-stdlib", Dependency - .withCoordinates("org.jetbrains.kotlin", "kotlin-stdlib-jdk8").scope(DependencyScope.COMPILE)); + String artifactId = KotlinMavenBuildCustomizer.KOTLIN_ONE_EIGHT_OR_LATER + .match(Version.parse(this.settings.getVersion())) ? "kotlin-stdlib" : "kotlin-stdlib-jdk8"; + build.dependencies().add("kotlin-stdlib", + Dependency.withCoordinates("org.jetbrains.kotlin", artifactId).scope(DependencyScope.COMPILE)); + } } diff --git a/initializr-generator-spring/src/test/java/io/spring/initializr/generator/spring/code/kotlin/KotlinMavenBuildCustomizerTests.java b/initializr-generator-spring/src/test/java/io/spring/initializr/generator/spring/code/kotlin/KotlinMavenBuildCustomizerTests.java index 9d90183e..42a7b560 100644 --- a/initializr-generator-spring/src/test/java/io/spring/initializr/generator/spring/code/kotlin/KotlinMavenBuildCustomizerTests.java +++ b/initializr-generator-spring/src/test/java/io/spring/initializr/generator/spring/code/kotlin/KotlinMavenBuildCustomizerTests.java @@ -86,7 +86,7 @@ class KotlinMavenBuildCustomizerTests { @Test void kotlinMavenPluginWithSeveralArgs() { MavenBuild build = new MavenBuild(); - new KotlinMavenBuildCustomizer(new TestKotlinProjectSettings()).customize(build); + new KotlinMavenBuildCustomizer(new KotlinOneEightProjectSettings()).customize(build); assertThat(build.plugins().values()).singleElement().satisfies((kotlinPlugin) -> { Configuration configuration = kotlinPlugin.getConfiguration(); Setting args = configuration.getSettings().get(0); @@ -100,9 +100,21 @@ class KotlinMavenBuildCustomizerTests { } @Test - void kotlinMavenKotlinStdlibIsConfigured() { + void kotlinMavenKotlinStdlibIsConfiguredWithKotlinOneEight() { MavenBuild build = new MavenBuild(); - new KotlinMavenBuildCustomizer(new TestKotlinProjectSettings()).customize(build); + new KotlinMavenBuildCustomizer(new KotlinOneEightProjectSettings()).customize(build); + assertThat(build.dependencies().ids()).containsOnly("kotlin-stdlib"); + io.spring.initializr.generator.buildsystem.Dependency kotlinStdlib = build.dependencies().get("kotlin-stdlib"); + assertThat(kotlinStdlib.getGroupId()).isEqualTo("org.jetbrains.kotlin"); + assertThat(kotlinStdlib.getArtifactId()).isEqualTo("kotlin-stdlib"); + assertThat(kotlinStdlib.getVersion()).isNull(); + assertThat(kotlinStdlib.getScope()).isEqualTo(DependencyScope.COMPILE); + } + + @Test + void kotlinMavenKotlinStdlibJdk8IsConfiguredWithKotlinOneSeven() { + MavenBuild build = new MavenBuild(); + new KotlinMavenBuildCustomizer(new KotlinOneSevenProjectSettings()).customize(build); assertThat(build.dependencies().ids()).containsOnly("kotlin-stdlib"); io.spring.initializr.generator.buildsystem.Dependency kotlinStdlib = build.dependencies().get("kotlin-stdlib"); assertThat(kotlinStdlib.getGroupId()).isEqualTo("org.jetbrains.kotlin"); @@ -111,10 +123,23 @@ class KotlinMavenBuildCustomizerTests { assertThat(kotlinStdlib.getScope()).isEqualTo(DependencyScope.COMPILE); } - private static class TestKotlinProjectSettings extends SimpleKotlinProjectSettings { + private static class KotlinOneEightProjectSettings extends SimpleKotlinProjectSettings { - TestKotlinProjectSettings() { - super("1.3.20"); + KotlinOneEightProjectSettings() { + super("1.8.0"); + } + + @Override + public List getCompilerArgs() { + return Arrays.asList("-Done=1", "-Dtwo=2"); + } + + } + + private static class KotlinOneSevenProjectSettings extends SimpleKotlinProjectSettings { + + KotlinOneSevenProjectSettings() { + super("1.7.22"); } @Override