Add jackson-module-kotlin dependency when appropriate

This commit introduces a "json" facet designed to identify
spring-boot-starter-json transitive dependency, and adds
jackson-module-kotlin dependency if any dependency with
that facet is included when Kotlin language is used.

See gh-600
This commit is contained in:
sdeleuze
2018-02-12 14:53:45 +01:00
committed by Stephane Nicoll
parent e612aab3a8
commit 4d0fac5df0
3 changed files with 117 additions and 0 deletions

View File

@@ -0,0 +1,50 @@
/*
* Copyright 2012-2018 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.ProjectRequestPostProcessor;
import io.spring.initializr.metadata.Dependency;
import io.spring.initializr.metadata.InitializrMetadata;
import org.springframework.stereotype.Component;
/**
* A {@link ProjectRequestPostProcessor} that automatically adds "jackson-module-kotlin"
* when Kotlin is used and a dependency has the "json" facet (meaning that it has
* "spring-boot-starter-json" transitive dependency).
*
* @author Sebastien Deleuze
*/
@Component
class JacksonKotlinRequestPostProcessor implements ProjectRequestPostProcessor {
private final Dependency jacksonModuleKotlin;
public JacksonKotlinRequestPostProcessor() {
this.jacksonModuleKotlin = Dependency.withId(
"jackson-module-kotlin", "com.fasterxml.jackson.module", "jackson-module-kotlin");
}
@Override
public void postProcessAfterResolution(ProjectRequest request, InitializrMetadata metadata) {
if (request.getFacets().contains("json") && "kotlin".equals(request.getLanguage())) {
request.getResolvedDependencies().add(this.jacksonModuleKotlin);
}
}
}

View File

@@ -284,6 +284,7 @@ initializr:
weight: 100 weight: 100
facets: facets:
- web - web
- json
links: links:
- rel: guide - rel: guide
href: https://spring.io/guides/gs/rest-service/ href: https://spring.io/guides/gs/rest-service/
@@ -301,9 +302,13 @@ initializr:
versionRange: 2.0.0.M1 versionRange: 2.0.0.M1
description: Reactive web development with Netty and Spring WebFlux description: Reactive web development with Netty and Spring WebFlux
weight: 90 weight: 90
facets:
- json
- name: Rest Repositories - name: Rest Repositories
id: data-rest id: data-rest
weight: 10 weight: 10
facets:
- json
description: Exposing Spring Data repositories over REST via spring-data-rest-webmvc description: Exposing Spring Data repositories over REST via spring-data-rest-webmvc
links: links:
- rel: guide - rel: guide
@@ -353,6 +358,8 @@ initializr:
- name: Jersey (JAX-RS) - name: Jersey (JAX-RS)
id: jersey id: jersey
description: RESTful Web Services framework with support of JAX-RS description: RESTful Web Services framework with support of JAX-RS
facets:
- json
versionRange: 1.2.0.RELEASE versionRange: 1.2.0.RELEASE
links: links:
- rel: reference - rel: reference

View File

@@ -0,0 +1,60 @@
/*
* 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 io.spring.initializr.metadata.Dependency;
import org.junit.Test;
/**
* Tests for {@link JacksonKotlinRequestPostProcessor}.
*
* @author Sebastien Deleuze
*/
public class JacksonKotlinRequestPostProcessorTests
extends AbstractRequestPostProcessorTests {
@Test
public void jacksonModuleKotlinIsAdded() {
ProjectRequest request = createProjectRequest("webflux");
request.setBootVersion("2.0.0.M2");
request.setLanguage("kotlin");
Dependency jacksonKotlinModuleTest = Dependency.withId(
"jackson-module-kotlin", "com.fasterxml.jackson.module", "jackson-module-kotlin");
generateMavenPom(request)
.hasDependency(jacksonKotlinModuleTest)
.hasDependenciesCount(6);
}
@Test
public void jacksonModuleKotlinIsNotAddedWithoutKotlin() {
ProjectRequest request = createProjectRequest("webflux");
request.setBootVersion("2.0.0.M2");
generateMavenPom(request)
.hasDependenciesCount(3);
}
@Test
public void jacksonModuleKotlinIsNotAddedWithoutJsonFacet() {
ProjectRequest request = createProjectRequest("batch");
request.setBootVersion("2.0.0.M2");
request.setLanguage("kotlin");
generateMavenPom(request)
.hasDependenciesCount(5);
}
}