From 59e50daf549402f8614e98fa634a05e5f53d2c97 Mon Sep 17 00:00:00 2001 From: KotlinIsland Date: Mon, 27 Feb 2023 12:55:39 +1000 Subject: [PATCH 1/2] Vary Kotlin stdlib artifact ID depending on the version of Kotlin See gh-1386 --- .../kotlin/KotlinMavenBuildCustomizer.java | 9 +++++-- .../KotlinMavenBuildCustomizerTests.java | 27 ++++++++++++++++++- 2 files changed, 33 insertions(+), 3 deletions(-) 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..e1151645 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 @@ -52,8 +52,13 @@ 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[] version = this.settings.getVersion().split("\\."); + String artifactId = (Integer.parseInt(version[0]) >= 2 + || Integer.parseInt(version[0]) == 1 && Integer.parseInt(version[1]) >= 8) ? "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..25b3fd0b 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 @@ -106,7 +106,19 @@ class KotlinMavenBuildCustomizerTests { 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-jdk8"); + assertThat(kotlinStdlib.getArtifactId()).isEqualTo("kotlin-stdlib"); + assertThat(kotlinStdlib.getVersion()).isNull(); + assertThat(kotlinStdlib.getScope()).isEqualTo(DependencyScope.COMPILE); + } + + @Test + void kotlinMavenKotlinStdlibIsConfiguredWithOldKotlin() { + MavenBuild build = new MavenBuild(); + new KotlinMavenBuildCustomizer(new TestKotlinProjectSettingsOldKotlin()).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-jvm8"); assertThat(kotlinStdlib.getVersion()).isNull(); assertThat(kotlinStdlib.getScope()).isEqualTo(DependencyScope.COMPILE); } @@ -114,6 +126,19 @@ class KotlinMavenBuildCustomizerTests { private static class TestKotlinProjectSettings extends SimpleKotlinProjectSettings { TestKotlinProjectSettings() { + super("1.8.10"); + } + + @Override + public List getCompilerArgs() { + return Arrays.asList("-Done=1", "-Dtwo=2"); + } + + } + + private static class TestKotlinProjectSettingsOldKotlin extends SimpleKotlinProjectSettings { + + TestKotlinProjectSettingsOldKotlin() { super("1.3.20"); } From ff8b7237ce00af8d68e62280d9758f49b5601735 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Mon, 27 Feb 2023 13:03:47 +0000 Subject: [PATCH 2/2] Polish "Vary Kotlin stdlib artifact ID depending on the version of Kotlin" See gh-1386 --- .../kotlin/KotlinMavenBuildCustomizer.java | 10 ++++---- .../KotlinMavenBuildCustomizerTests.java | 24 +++++++++---------- 2 files changed, 18 insertions(+), 16 deletions(-) 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 e1151645..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,10 +56,8 @@ class KotlinMavenBuildCustomizer implements BuildCustomizer { }); kotlinMavenPlugin.dependency("org.jetbrains.kotlin", "kotlin-maven-allopen", "${kotlin.version}"); }); - String[] version = this.settings.getVersion().split("\\."); - String artifactId = (Integer.parseInt(version[0]) >= 2 - || Integer.parseInt(version[0]) == 1 && Integer.parseInt(version[1]) >= 8) ? "kotlin-stdlib" - : "kotlin-stdlib-jdk8"; + 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 25b3fd0b..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,9 @@ 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"); @@ -112,21 +112,21 @@ class KotlinMavenBuildCustomizerTests { } @Test - void kotlinMavenKotlinStdlibIsConfiguredWithOldKotlin() { + void kotlinMavenKotlinStdlibJdk8IsConfiguredWithKotlinOneSeven() { MavenBuild build = new MavenBuild(); - new KotlinMavenBuildCustomizer(new TestKotlinProjectSettingsOldKotlin()).customize(build); + 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"); - assertThat(kotlinStdlib.getArtifactId()).isEqualTo("kotlin-stdlib-jvm8"); + assertThat(kotlinStdlib.getArtifactId()).isEqualTo("kotlin-stdlib-jdk8"); assertThat(kotlinStdlib.getVersion()).isNull(); assertThat(kotlinStdlib.getScope()).isEqualTo(DependencyScope.COMPILE); } - private static class TestKotlinProjectSettings extends SimpleKotlinProjectSettings { + private static class KotlinOneEightProjectSettings extends SimpleKotlinProjectSettings { - TestKotlinProjectSettings() { - super("1.8.10"); + KotlinOneEightProjectSettings() { + super("1.8.0"); } @Override @@ -136,10 +136,10 @@ class KotlinMavenBuildCustomizerTests { } - private static class TestKotlinProjectSettingsOldKotlin extends SimpleKotlinProjectSettings { + private static class KotlinOneSevenProjectSettings extends SimpleKotlinProjectSettings { - TestKotlinProjectSettingsOldKotlin() { - super("1.3.20"); + KotlinOneSevenProjectSettings() { + super("1.7.22"); } @Override