mirror of
https://gitee.com/dcren/initializr.git
synced 2025-07-15 23:13:30 +08:00
Support for experimental reactiver starter
This commit adds support for the experimental reactive starter. When that starter is selected, the version of Spring Framework and Reactor are automatically overridden and the java version is forced to 1.8 This starter includes an additional BOM that provides dependency management for reactive-related dependencies (typically netty).
This commit is contained in:
parent
af2ae44b8d
commit
ae2b596735
@ -24,6 +24,23 @@
|
||||
<groupId>io.spring.initializr</groupId>
|
||||
<artifactId>initializr-actuator</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-test</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.spring.initializr</groupId>
|
||||
<artifactId>initializr-generator</artifactId>
|
||||
<type>test-jar</type>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>xmlunit</groupId>
|
||||
<artifactId>xmlunit</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
|
@ -0,0 +1,32 @@
|
||||
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['spring.version'] = { '5.0.0.BUILD-SNAPSHOT' }
|
||||
request.buildProperties.versions['reactor.version'] = { '3.0.0.BUILD-SNAPSHOT' }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -43,6 +43,10 @@ initializr:
|
||||
version: 1.0.0.BUILD-SNAPSHOT
|
||||
additionalBoms: [cloud-bom]
|
||||
repositories: spring-snapshots,spring-milestones
|
||||
experimental-reactive-bom:
|
||||
groupId: org.springframework.boot.experimental
|
||||
artifactId: spring-boot-dependencies-web-reactive
|
||||
version: 0.1.0.BUILD-SNAPSHOT
|
||||
scs-bom:
|
||||
groupId: io.pivotal.spring.cloud
|
||||
artifactId: spring-cloud-services-dependencies
|
||||
@ -53,6 +57,16 @@ initializr:
|
||||
kotlin:
|
||||
version: 1.0.3
|
||||
dependencies:
|
||||
- name: Experimental
|
||||
content:
|
||||
- name: Reactive Web
|
||||
id: experimental-web-reactive
|
||||
groupId: org.springframework.boot.experimental
|
||||
artifactId: spring-boot-starter-web-reactive
|
||||
bom: experimental-reactive-bom
|
||||
versionRange: 1.4.0.RC1
|
||||
repository: spring-snapshots
|
||||
description: Reactive web development with Tomcat and Spring Reactive (experimental)
|
||||
- name: Core
|
||||
content:
|
||||
- name: Security
|
||||
|
@ -0,0 +1,145 @@
|
||||
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 = '1.4.0.BUILD-SNAPSHOT'
|
||||
request.javaVersion = '1.7'
|
||||
generateMavenPom(request).hasJavaVersion('1.8')
|
||||
}
|
||||
|
||||
@Test
|
||||
void java8IsMandatoryGradle() {
|
||||
ProjectRequest request = createProjectRequest('experimental-web-reactive')
|
||||
request.bootVersion = '1.4.0.BUILD-SNAPSHOT'
|
||||
request.javaVersion = '1.7'
|
||||
generateGradleBuild(request).hasJavaVersion('1.8')
|
||||
}
|
||||
|
||||
@Test
|
||||
void versionsAreOverriddenMaven() {
|
||||
ProjectRequest request = createProjectRequest('experimental-web-reactive')
|
||||
request.bootVersion = '1.4.0.BUILD-SNAPSHOT'
|
||||
generateMavenPom(request)
|
||||
.hasProperty('spring.version', '5.0.0.BUILD-SNAPSHOT')
|
||||
.hasProperty('reactor.version', '3.0.0.BUILD-SNAPSHOT')
|
||||
}
|
||||
|
||||
@Test
|
||||
void versionsAreNorOverriddenGradle() {
|
||||
ProjectRequest request = createProjectRequest('experimental-web-reactive')
|
||||
request.bootVersion = '1.4.0.BUILD-SNAPSHOT'
|
||||
generateGradleBuild(request)
|
||||
.doesNotContain("ext['spring.version'] = '5.0.0.BUILD-SNAPSHOT'")
|
||||
.doesNotContain("ext['reactor.version'] = '3.0.0.BUILD-SNAPSHOT'")
|
||||
}
|
||||
|
||||
@Test
|
||||
void bomIsAddedMaven() {
|
||||
ProjectRequest request = createProjectRequest('experimental-web-reactive')
|
||||
request.bootVersion = '1.4.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 = '1.4.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 = '1.4.1.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
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue
Block a user