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 c2c31156..4ddb3553 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 @@ -447,10 +447,11 @@ public class ProjectGenerator { model.put("servletInitializrImport", new Imports(request.getLanguage()).add( getServletInitializrClass(request)).toString()); + // Kotlin-specific dep + model.put("kotlinStdlibArtifactId", getKotlinStdlibArtifactId(request)); + // Java versions - model.put("isJava6", isJavaVersion(request, "1.6")); - model.put("isJava7", isJavaVersion(request, "1.7")); - model.put("isJava8", isJavaVersion(request, "1.8")); + model.put("java8OrLater", isJava8OrLater(request)); // Append the project request to the model BeanWrapperImpl bean = new BeanWrapperImpl(request); @@ -549,6 +550,22 @@ public class ProjectGenerator { } } + protected String getKotlinStdlibArtifactId(ProjectRequest request) { + String javaVersion = request.getJavaVersion(); + if ("1.6".equals(javaVersion)) { + return "kotlin-stdlib"; + } + else if ("1.7".equals(javaVersion)) { + return "kotlin-stdlib-jre7"; + } + return "kotlin-stdlib-jre8"; + } + + private static boolean isJava8OrLater(ProjectRequest request) { + return !request.getJavaVersion().equals("1.6") + && !request.getJavaVersion().equals("1.7"); + } + private static boolean isGradleBuild(ProjectRequest request) { return "gradle".equals(request.getBuild()); } @@ -574,10 +591,6 @@ public class ProjectGenerator { return VERSION_2_0_0_M3.compareTo(bootVersion) < 0; } - private static boolean isJavaVersion(ProjectRequest request, String version) { - return request.getJavaVersion().equals(version); - } - private byte[] doGenerateMavenPom(Map model) { return templateRenderer.process("starter-pom.xml", model).getBytes(); } diff --git a/initializr-generator/src/main/resources/templates/starter-build.gradle b/initializr-generator/src/main/resources/templates/starter-build.gradle index f374058d..3625c74c 100644 --- a/initializr-generator/src/main/resources/templates/starter-build.gradle +++ b/initializr-generator/src/main/resources/templates/starter-build.gradle @@ -46,13 +46,13 @@ apply plugin: 'war' group = '{{groupId}}' version = '{{version}}' -sourceCompatibility = {{javaVersion}}{{#kotlin}}{{#isJava8}} +sourceCompatibility = {{javaVersion}}{{#kotlin}}{{#java8OrLater}} compileKotlin { kotlinOptions.jvmTarget = "1.8" } compileTestKotlin { kotlinOptions.jvmTarget = "1.8" -}{{/isJava8}}{{/kotlin}} +}{{/java8OrLater}}{{/kotlin}} repositories { mavenCentral() @@ -83,15 +83,7 @@ dependencies { compile('org.codehaus.groovy:groovy') {{/groovy}} {{#kotlin}} - {{#isJava6}} - compile("org.jetbrains.kotlin:kotlin-stdlib:${kotlinVersion}") - {{/isJava6}} - {{#isJava7}} - compile("org.jetbrains.kotlin:kotlin-stdlib-jre7{{^kotlinSupport}}:${kotlinVersion}{{/kotlinSupport}}") - {{/isJava7}} - {{#isJava8}} - compile("org.jetbrains.kotlin:kotlin-stdlib-jre8{{^kotlinSupport}}:${kotlinVersion}{{/kotlinSupport}}") - {{/isJava8}} + compile("org.jetbrains.kotlin:{{kotlinStdlibArtifactId}}{{^kotlinSupport}}:${kotlinVersion}{{/kotlinSupport}}") compile("org.jetbrains.kotlin:kotlin-reflect{{^kotlinSupport}}:${kotlinVersion}{{/kotlinSupport}}") {{/kotlin}} {{#runtimeDependencies}} diff --git a/initializr-generator/src/main/resources/templates/starter-pom.xml b/initializr-generator/src/main/resources/templates/starter-pom.xml index 331e8951..057862b3 100644 --- a/initializr-generator/src/main/resources/templates/starter-pom.xml +++ b/initializr-generator/src/main/resources/templates/starter-pom.xml @@ -46,18 +46,10 @@ groovy {{/groovy}} - {{#kotlin}} + {{#kotlin}} org.jetbrains.kotlin - {{#isJava6}} - kotlin-stdlib - {{/isJava6}} - {{#isJava7}} - kotlin-stdlib-jre7 - {{/isJava7}} - {{#isJava8}} - kotlin-stdlib-jre8 - {{/isJava8}} + {{kotlinStdlibArtifactId}} {{^kotlinSupport}} ${kotlin.version} {{/kotlinSupport}} @@ -189,9 +181,9 @@ spring {{^kotlinSupport}} - {{#isJava8}} + {{#java8OrLater}} 1.8 - {{/isJava8}} + {{/java8OrLater}} {{/kotlinSupport}} {{^kotlinSupport}} diff --git a/initializr-generator/src/test/java/io/spring/initializr/generator/ProjectGeneratorBuildTests.java b/initializr-generator/src/test/java/io/spring/initializr/generator/ProjectGeneratorBuildTests.java index 6eb19b1e..b3f32455 100644 --- a/initializr-generator/src/test/java/io/spring/initializr/generator/ProjectGeneratorBuildTests.java +++ b/initializr-generator/src/test/java/io/spring/initializr/generator/ProjectGeneratorBuildTests.java @@ -215,6 +215,17 @@ public class ProjectGeneratorBuildTests extends AbstractProjectGeneratorTests { "project/" + build + "/kotlin-springboot2-" + assertFileName)); } + @Test + public void kotlinJava9() { + ProjectRequest request = createProjectRequest(); + request.setLanguage("kotlin"); + request.setBootVersion("2.0.0.M6"); + request.setJavaVersion("9"); + ProjectAssert project = generateProject(request); + project.sourceCodeAssert(fileName).equalsTo(new ClassPathResource( + "project/" + build + "/kotlin-java9-" + assertFileName)); + } + @Override public ProjectRequest createProjectRequest(String... styles) { ProjectRequest request = super.createProjectRequest(styles); diff --git a/initializr-generator/src/test/resources/project/gradle/kotlin-java9-build.gradle.gen b/initializr-generator/src/test/resources/project/gradle/kotlin-java9-build.gradle.gen new file mode 100644 index 00000000..bdd82b1e --- /dev/null +++ b/initializr-generator/src/test/resources/project/gradle/kotlin-java9-build.gradle.gen @@ -0,0 +1,46 @@ +buildscript { + ext { + kotlinVersion = '1.1.1' + springBootVersion = '2.0.0.M6' + } + repositories { + mavenCentral() + maven { url "https://repo.spring.io/snapshot" } + maven { url "https://repo.spring.io/milestone" } + } + dependencies { + classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}") + classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:${kotlinVersion}") + classpath("org.jetbrains.kotlin:kotlin-allopen:${kotlinVersion}") + } +} + +apply plugin: 'kotlin' +apply plugin: 'kotlin-spring' +apply plugin: 'eclipse' +apply plugin: 'org.springframework.boot' +apply plugin: 'io.spring.dependency-management' + +group = 'com.example' +version = '0.0.1-SNAPSHOT' +sourceCompatibility = 9 +compileKotlin { + kotlinOptions.jvmTarget = "1.8" +} +compileTestKotlin { + kotlinOptions.jvmTarget = "1.8" +} + +repositories { + mavenCentral() + maven { url "https://repo.spring.io/snapshot" } + maven { url "https://repo.spring.io/milestone" } +} + + +dependencies { + compile('org.springframework.boot:spring-boot-starter') + compile("org.jetbrains.kotlin:kotlin-stdlib-jre8") + compile("org.jetbrains.kotlin:kotlin-reflect") + testCompile('org.springframework.boot:spring-boot-starter-test') +} diff --git a/initializr-generator/src/test/resources/project/maven/kotlin-java9-pom.xml.gen b/initializr-generator/src/test/resources/project/maven/kotlin-java9-pom.xml.gen new file mode 100644 index 00000000..665c0823 --- /dev/null +++ b/initializr-generator/src/test/resources/project/maven/kotlin-java9-pom.xml.gen @@ -0,0 +1,115 @@ + + + 4.0.0 + + com.example + demo + 0.0.1-SNAPSHOT + jar + + demo + Demo project for Spring Boot + + + org.springframework.boot + spring-boot-starter-parent + 2.0.0.M6 + + + + + true + UTF-8 + UTF-8 + 9 + + + + + org.springframework.boot + spring-boot-starter + + + org.jetbrains.kotlin + kotlin-stdlib-jre8 + + + org.jetbrains.kotlin + kotlin-reflect + + + + org.springframework.boot + spring-boot-starter-test + test + + + + + ${project.basedir}/src/main/kotlin + ${project.basedir}/src/test/kotlin + + + org.springframework.boot + spring-boot-maven-plugin + + + kotlin-maven-plugin + org.jetbrains.kotlin + + + spring + + + + + org.jetbrains.kotlin + kotlin-maven-allopen + ${kotlin.version} + + + + + + + + + spring-snapshots + Spring Snapshots + https://repo.spring.io/snapshot + + true + + + + spring-milestones + Spring Milestones + https://repo.spring.io/milestone + + false + + + + + + + spring-snapshots + Spring Snapshots + https://repo.spring.io/snapshot + + true + + + + spring-milestones + Spring Milestones + https://repo.spring.io/milestone + + false + + + + + +