Replace reactor extension

This commit removes the reactor extension as it is no longer necessary
given all the customizations have been added in Spring Boot now.

Instead, Java8 is now forced for any use of Spring Boot 2.0 and later.
Arguably, this should have been the case since the beginning.
This commit is contained in:
Stephane Nicoll 2016-11-04 11:51:05 +01:00
parent 2097638505
commit eb5385615b
4 changed files with 125 additions and 192 deletions

View File

@ -1,31 +0,0 @@
package io.spring.initializr.service.extension
import io.spring.initializr.generator.ProjectRequest
import io.spring.initializr.generator.ProjectRequestPostProcessorAdapter
import io.spring.initializr.metadata.InitializrMetadata
import org.springframework.stereotype.Component
/**
* The "web-reactive" starter is experimental as Spring Boot hasn't integrated Spring 5
* yet. This {@link io.spring.initializr.generator.ProjectRequestPostProcessor} forces
* Java 8 as well as Spring 5 and Reactor 3.
*
* @author Stephane Nicoll
*/
@Component
class ReactiveProjectRequestPostProcessor extends ProjectRequestPostProcessorAdapter {
@Override
void postProcessAfterResolution(ProjectRequest request, InitializrMetadata metadata) {
if (request.resolvedDependencies.find { it.id.equals('experimental-web-reactive') }) {
request.javaVersion = '1.8'
// No need to override those versions with Gradle
if ('maven'.equals(request.build)) {
request.buildProperties.versions['reactor.version'] = { '3.0.3.RELEASE' }
}
}
}
}

View File

@ -0,0 +1,44 @@
/*
* Copyright 2012-2016 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 io.spring.initializr.generator.ProjectRequestPostProcessorAdapter
import io.spring.initializr.metadata.InitializrMetadata
import io.spring.initializr.util.Version
import org.springframework.stereotype.Component
/**
* As of Spring Boot 2.0, Java8 is mandatory so this extension makes sure that the
* java version is forced.
*
* @author Stephane Nicoll
*/
@Component
class SpringBoot2RequestPostProcessor extends ProjectRequestPostProcessorAdapter {
private static final VERSION_2_0_0_M1 = Version.parse('2.0.0.M1')
@Override
void postProcessAfterResolution(ProjectRequest request, InitializrMetadata metadata) {
if (VERSION_2_0_0_M1 <= Version.safeParse(request.bootVersion)) {
request.javaVersion = '1.8'
}
}
}

View File

@ -1,161 +0,0 @@
package io.spring.initializr.service.extension
import io.spring.initializr.generator.ProjectGenerator
import io.spring.initializr.generator.ProjectRequest
import io.spring.initializr.metadata.InitializrMetadata
import io.spring.initializr.metadata.InitializrMetadataBuilder
import io.spring.initializr.metadata.InitializrMetadataProvider
import io.spring.initializr.metadata.InitializrProperties
import io.spring.initializr.test.generator.GradleBuildAssert
import io.spring.initializr.test.generator.PomAssert
import io.spring.initializr.web.support.DefaultInitializrMetadataProvider
import org.junit.Test
import org.junit.runner.RunWith
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.boot.test.context.SpringBootTest
import org.springframework.boot.test.context.TestConfiguration
import org.springframework.context.annotation.Bean
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner
import org.springframework.web.client.RestTemplate
/**
* Tests for {@link ReactiveProjectRequestPostProcessor}.
*
* @author Stephane Nicoll
*/
@RunWith(SpringJUnit4ClassRunner)
@SpringBootTest
class ReactiveProjectRequestPostProcessorTests {
@Autowired
private ProjectGenerator projectGenerator
@Autowired
private InitializrMetadataProvider metadataProvider
@Test
void java8IsMandatoryMaven() {
ProjectRequest request = createProjectRequest('experimental-web-reactive')
request.bootVersion = '2.0.0.BUILD-SNAPSHOT'
request.javaVersion = '1.7'
generateMavenPom(request).hasJavaVersion('1.8')
}
@Test
void java8IsMandatoryGradle() {
ProjectRequest request = createProjectRequest('experimental-web-reactive')
request.bootVersion = '2.0.0.BUILD-SNAPSHOT'
request.javaVersion = '1.7'
generateGradleBuild(request).hasJavaVersion('1.8')
}
@Test
void versionsAreOverriddenMaven() {
ProjectRequest request = createProjectRequest('experimental-web-reactive')
request.bootVersion = '2.0.0.BUILD-SNAPSHOT'
generateMavenPom(request)
.hasProperty('reactor.version', '3.0.3.RELEASE')
}
@Test
void versionsAreNorOverriddenGradle() {
ProjectRequest request = createProjectRequest('experimental-web-reactive')
request.bootVersion = '2.0.0.BUILD-SNAPSHOT'
generateGradleBuild(request)
.doesNotContain("ext['spring.version'] = '5.0.0.BUILD-SNAPSHOT'")
.doesNotContain("ext['reactor.version'] = '3.0.3.RELEASE'")
}
@Test
void bomIsAddedMaven() {
ProjectRequest request = createProjectRequest('experimental-web-reactive')
request.bootVersion = '2.0.0.RELEASE'
generateMavenPom(request).hasBom('org.springframework.boot.experimental',
'spring-boot-dependencies-web-reactive', '0.1.0.BUILD-SNAPSHOT')
}
@Test
void bomIsAddedWithSnapshotMaven() {
ProjectRequest request = createProjectRequest('experimental-web-reactive')
request.bootVersion = '2.0.0.BUILD-SNAPSHOT'
generateMavenPom(request).hasBom('org.springframework.boot.experimental',
'spring-boot-dependencies-web-reactive', '0.1.0.BUILD-SNAPSHOT')
}
@Test
void bomIsAddedGradle() {
ProjectRequest request = createProjectRequest('experimental-web-reactive')
request.bootVersion = '2.0.0.RELEASE'
generateGradleBuild(request).contains("dependencyManagement {")
.contains("imports {")
.contains("mavenBom \"org.springframework.boot.experimental:spring-boot-dependencies-web-reactive:0.1.0.BUILD-SNAPSHOT\"")
}
@Test
void bomIsAddedWithSnapshotGradle() {
ProjectRequest request = createProjectRequest('experimental-web-reactive')
request.bootVersion = '2.0.0.BUILD-SNAPSHOT'
generateGradleBuild(request).contains("dependencyManagement {")
.contains("imports {")
.contains("mavenBom \"org.springframework.boot.experimental:spring-boot-dependencies-web-reactive:0.1.0.BUILD-SNAPSHOT\"")
}
@Test
void snapshotRepoIsAddedIfNecessary() {
ProjectRequest request = createProjectRequest('experimental-web-reactive')
request.bootVersion = '2.0.0.RELEASE'
generateMavenPom(request).hasRepository('spring-snapshots', 'Spring Snapshots',
'https://repo.spring.io/snapshot', true)
}
@Test
void simpleProjectUnaffected() {
ProjectRequest request = createProjectRequest('web')
request.javaVersion = '1.7'
request.buildProperties.versions['spring.version'] = { '3.2.7.RELEASE' }
generateMavenPom(request).hasJavaVersion('1.7')
.hasProperty('spring.version', '3.2.7.RELEASE')
.hasNoProperty('reactor.version')
}
private ProjectRequest createProjectRequest(String... styles) {
def request = new ProjectRequest()
request.initialize(metadataProvider.get())
request.style.addAll Arrays.asList(styles)
request
}
private PomAssert generateMavenPom(ProjectRequest request) {
request.type = 'maven-build'
def content = new String(projectGenerator.generateMavenPom(request))
new PomAssert(content)
}
private GradleBuildAssert generateGradleBuild(ProjectRequest request) {
request.type = 'gradle-build'
def content = new String(projectGenerator.generateGradleBuild(request))
new GradleBuildAssert(content)
}
@TestConfiguration
static class Config {
@Bean
InitializrMetadataProvider initializrMetadataProvider(InitializrProperties properties) {
new DefaultInitializrMetadataProvider(
InitializrMetadataBuilder.fromInitializrProperties(properties).build(),
new RestTemplate()) {
@Override
protected void updateInitializrMetadata(InitializrMetadata metadata) {
// Disable metadata fetching from spring.io
}
}
}
}
}

View File

@ -0,0 +1,81 @@
/*
* Copyright 2012-2016 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.ProjectGenerator
import io.spring.initializr.generator.ProjectRequest
import io.spring.initializr.metadata.InitializrMetadataProvider
import io.spring.initializr.test.generator.GradleBuildAssert
import io.spring.initializr.test.generator.PomAssert
import org.junit.Test
import org.junit.runner.RunWith
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.boot.test.context.SpringBootTest
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner
/**
* Tests for {@link SpringBoot2RequestPostProcessor}.
*
* @author Stephane Nicoll
*/
@RunWith(SpringJUnit4ClassRunner)
@SpringBootTest
class SpringBoot2RequestPostProcessorTests {
@Autowired
private ProjectGenerator projectGenerator
@Autowired
private InitializrMetadataProvider metadataProvider
@Test
void java8IsMandatoryMaven() {
ProjectRequest request = createProjectRequest('web')
request.bootVersion = '2.0.0.BUILD-SNAPSHOT'
request.javaVersion = '1.7'
generateMavenPom(request).hasJavaVersion('1.8')
}
@Test
void java8IsMandatoryGradle() {
ProjectRequest request = createProjectRequest('data-jpa')
request.bootVersion = '2.0.0.M3'
request.javaVersion = '1.7'
generateGradleBuild(request).hasJavaVersion('1.8')
}
private PomAssert generateMavenPom(ProjectRequest request) {
request.type = 'maven-build'
def content = new String(projectGenerator.generateMavenPom(request))
new PomAssert(content)
}
private GradleBuildAssert generateGradleBuild(ProjectRequest request) {
request.type = 'gradle-build'
def content = new String(projectGenerator.generateGradleBuild(request))
new GradleBuildAssert(content)
}
private ProjectRequest createProjectRequest(String... styles) {
def request = new ProjectRequest()
request.initialize(metadataProvider.get())
request.style.addAll Arrays.asList(styles)
request
}
}