diff --git a/initializr-service/src/main/java/io/spring/initializr/service/extension/Java9RequestPostProcessor.java b/initializr-service/src/main/java/io/spring/initializr/service/extension/Java9RequestPostProcessor.java new file mode 100644 index 00000000..084c32fb --- /dev/null +++ b/initializr-service/src/main/java/io/spring/initializr/service/extension/Java9RequestPostProcessor.java @@ -0,0 +1,57 @@ +/* + * Copyright 2012-2017 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.service.extension; + +import java.util.Arrays; +import java.util.List; + +import io.spring.initializr.generator.ProjectRequest; +import io.spring.initializr.generator.ProjectRequestPostProcessor; +import io.spring.initializr.metadata.InitializrMetadata; +import io.spring.initializr.util.Version; + +import org.springframework.stereotype.Component; + +/** + * Handle corner cases when Java9 is required. + * + * @author Stephane Nicoll + */ +@Component +class Java9RequestPostProcessor implements ProjectRequestPostProcessor { + + private static final Version VERSION_2_0_0_M1 = Version.parse("2.0.0.M1"); + + private static final List UNSUPPORTED_LANGUAGES = Arrays.asList("groovy", "kotlin"); + + @Override + public void postProcessAfterResolution(ProjectRequest request, InitializrMetadata metadata) { + Version requestVersion = Version.safeParse(request.getBootVersion()); + if (!"9".equals(request.getJavaVersion())) { + return; + } + // Not supported for Spring Boot 1.x + if (VERSION_2_0_0_M1.compareTo(requestVersion) > 0) { + request.setJavaVersion("1.8"); + } + // Not supported for Kotlin & Groovy + if (UNSUPPORTED_LANGUAGES.contains(request.getLanguage())) { + request.setJavaVersion("1.8"); + } + } + +} diff --git a/initializr-service/src/main/java/io/spring/initializr/service/extension/SpringBoot2RequestPostProcessor.java b/initializr-service/src/main/java/io/spring/initializr/service/extension/SpringBoot2RequestPostProcessor.java index c76879e5..da5513ed 100644 --- a/initializr-service/src/main/java/io/spring/initializr/service/extension/SpringBoot2RequestPostProcessor.java +++ b/initializr-service/src/main/java/io/spring/initializr/service/extension/SpringBoot2RequestPostProcessor.java @@ -16,6 +16,9 @@ package io.spring.initializr.service.extension; +import java.util.Arrays; +import java.util.List; + import io.spring.initializr.generator.ProjectRequest; import io.spring.initializr.generator.ProjectRequestPostProcessor; import io.spring.initializr.metadata.InitializrMetadata; @@ -34,11 +37,15 @@ class SpringBoot2RequestPostProcessor implements ProjectRequestPostProcessor { private static final Version VERSION_2_0_0_M1 = Version.parse("2.0.0.M1"); + private static final List VALID_VERSIONS = Arrays.asList("1.8", "9"); + @Override public void postProcessAfterResolution(ProjectRequest request, InitializrMetadata metadata) { - Version requestVersion = Version.safeParse(request.getBootVersion()); - if (VERSION_2_0_0_M1.compareTo(requestVersion) <= 0) { - request.setJavaVersion("1.8"); + if (!VALID_VERSIONS.contains(request.getJavaVersion())) { + Version requestVersion = Version.safeParse(request.getBootVersion()); + if (VERSION_2_0_0_M1.compareTo(requestVersion) <= 0) { + request.setJavaVersion("1.8"); + } } } diff --git a/initializr-service/src/main/resources/application.yml b/initializr-service/src/main/resources/application.yml index 458fedab..67238779 100644 --- a/initializr-service/src/main/resources/application.yml +++ b/initializr-service/src/main/resources/application.yml @@ -1251,11 +1251,13 @@ initializr: id: war default: false javaVersions: + - id: 9 + default: false - id: 1.8 + name: 8 default: true - id: 1.7 - default: false - - id: 1.6 + name: 7 default: false languages: - name: Java diff --git a/initializr-service/src/test/java/io/spring/initializr/service/extension/Java9RequestPostProcessorTests.java b/initializr-service/src/test/java/io/spring/initializr/service/extension/Java9RequestPostProcessorTests.java new file mode 100644 index 00000000..15b20fc7 --- /dev/null +++ b/initializr-service/src/test/java/io/spring/initializr/service/extension/Java9RequestPostProcessorTests.java @@ -0,0 +1,98 @@ +/* + * Copyright 2012-2017 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.service.extension; + +import io.spring.initializr.generator.ProjectRequest; +import org.junit.Test; + +/** + * Tests for {@link Java9RequestPostProcessor}. + * + * @author Stephane Nicoll + */ +public class Java9RequestPostProcessorTests + extends AbstractRequestPostProcessorTests { + + @Test + public void java9CannotBeUsedWithSpringBoot1Maven() { + ProjectRequest request = createProjectRequest("web"); + request.setBootVersion("1.5.8.RELEASE"); + request.setJavaVersion("9"); + generateMavenPom(request).hasJavaVersion("1.8"); + } + + @Test + public void java9CannotBeUsedWithSpringBoot1Gradle() { + ProjectRequest request = createProjectRequest("data-jpa"); + request.setBootVersion("1.99.99.BUILD-SNAPSHOT"); + request.setJavaVersion("9"); + generateGradleBuild(request).hasJavaVersion("1.8"); + } + + @Test + public void java9CannotBeUsedWithGroovyMaven() { + ProjectRequest request = createProjectRequest("web"); + request.setBootVersion("2.0.1.RELEASE"); + request.setLanguage("groovy"); + request.setJavaVersion("9"); + generateMavenPom(request).hasJavaVersion("1.8"); + } + + @Test + public void java9CannotBeUsedWithKotlinMaven() { + ProjectRequest request = createProjectRequest("web"); + request.setBootVersion("2.0.1.RELEASE"); + request.setLanguage("kotlin"); + request.setJavaVersion("9"); + generateMavenPom(request).hasJavaVersion("1.8"); + } + + @Test + public void java9CannotBeUsedWithGroovyGradle() { + ProjectRequest request = createProjectRequest("data-jpa"); + request.setBootVersion("2.0.1.RELEASE"); + request.setLanguage("groovy"); + request.setJavaVersion("9"); + generateGradleBuild(request).hasJavaVersion("1.8"); + } + + @Test + public void java9CannotBeUsedWithKotlinGradle() { + ProjectRequest request = createProjectRequest("data-jpa"); + request.setBootVersion("2.0.1.RELEASE"); + request.setLanguage("kotlin"); + request.setJavaVersion("9"); + generateGradleBuild(request).hasJavaVersion("1.8"); + } + + @Test + public void java9CanBeUsedWithSpringBoot2Maven() { + ProjectRequest request = createProjectRequest("web"); + request.setBootVersion("2.0.1.RELEASE"); + request.setJavaVersion("9"); + generateMavenPom(request).hasJavaVersion("9"); + } + + @Test + public void java9CanBeUsedWithSpringBoot2Gradle() { + ProjectRequest request = createProjectRequest("data-jpa"); + request.setBootVersion("2.0.0.M3"); + request.setJavaVersion("9"); + generateGradleBuild(request).hasJavaVersion("9"); + } + +} diff --git a/initializr-service/src/test/java/io/spring/initializr/service/extension/SpringBoot2RequestPostProcessorTests.java b/initializr-service/src/test/java/io/spring/initializr/service/extension/SpringBoot2RequestPostProcessorTests.java index 46dbe102..97dbc98d 100644 --- a/initializr-service/src/test/java/io/spring/initializr/service/extension/SpringBoot2RequestPostProcessorTests.java +++ b/initializr-service/src/test/java/io/spring/initializr/service/extension/SpringBoot2RequestPostProcessorTests.java @@ -43,4 +43,20 @@ public class SpringBoot2RequestPostProcessorTests generateGradleBuild(request).hasJavaVersion("1.8"); } + @Test + public void java9CanBeUsedMaven() { + ProjectRequest request = createProjectRequest("web"); + request.setBootVersion("2.0.0.BUILD-SNAPSHOT"); + request.setJavaVersion("9"); + generateMavenPom(request).hasJavaVersion("9"); + } + + @Test + public void java9CanBeUsedGradle() { + ProjectRequest request = createProjectRequest("data-jpa"); + request.setBootVersion("2.0.0.M3"); + request.setJavaVersion("9"); + generateGradleBuild(request).hasJavaVersion("9"); + } + }