Skip to content

Commit 6c8b16b

Browse files
committed
Add spring-boot-tomcat-runtime on war deployments for Boot >= 4.0.0-RC1
Closes gh-1710
1 parent fd44294 commit 6c8b16b

File tree

2 files changed

+35
-3
lines changed

2 files changed

+35
-3
lines changed

initializr-generator-spring/src/main/java/io/spring/initializr/generator/spring/build/WarPackagingWebStarterBuildCustomizer.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919
import io.spring.initializr.generator.buildsystem.Build;
2020
import io.spring.initializr.generator.project.ProjectDescription;
2121
import io.spring.initializr.generator.version.Version;
22+
import io.spring.initializr.generator.version.VersionParser;
23+
import io.spring.initializr.generator.version.VersionRange;
2224
import io.spring.initializr.metadata.Dependency;
2325
import io.spring.initializr.metadata.InitializrMetadata;
2426
import io.spring.initializr.metadata.support.MetadataBuildItemMapper;
@@ -35,6 +37,8 @@
3537
*/
3638
public class WarPackagingWebStarterBuildCustomizer implements BuildCustomizer<Build> {
3739

40+
private static final VersionRange SPRING_BOOT_4_RC1_OR_LATER = VersionParser.DEFAULT.parseRange("4.0.0-RC1");
41+
3842
private final InitializrMetadata metadata;
3943

4044
private final Version platformVersion;
@@ -74,7 +78,14 @@ private Dependency determineWebDependency(InitializrMetadata metadata) {
7478

7579
private Dependency determineTomcatDependency(InitializrMetadata metadata) {
7680
Dependency tomcat = metadata.getDependencies().get("tomcat");
77-
return (tomcat != null) ? tomcat : Dependency.createSpringBootStarter("tomcat");
81+
if (tomcat != null) {
82+
return tomcat;
83+
}
84+
if (SPRING_BOOT_4_RC1_OR_LATER.match(this.platformVersion)) {
85+
return Dependency.create("org.springframework.boot", "spring-boot-tomcat-runtime", null,
86+
Dependency.SCOPE_PROVIDED);
87+
}
88+
return Dependency.createSpringBootStarter("tomcat");
7889
}
7990

8091
}

initializr-generator-spring/src/test/java/io/spring/initializr/generator/spring/build/WarPackagingWebStarterBuildCustomizerTests.java

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,14 +21,15 @@
2121
import io.spring.initializr.generator.buildsystem.Build;
2222
import io.spring.initializr.generator.buildsystem.maven.MavenBuild;
2323
import io.spring.initializr.generator.project.MutableProjectDescription;
24-
import io.spring.initializr.generator.project.ProjectDescription;
2524
import io.spring.initializr.generator.test.InitializrMetadataTestBuilder;
2625
import io.spring.initializr.generator.version.Version;
2726
import io.spring.initializr.metadata.Dependency;
2827
import io.spring.initializr.metadata.InitializrMetadata;
2928
import io.spring.initializr.metadata.support.MetadataBuildItemResolver;
3029
import org.junit.jupiter.api.BeforeEach;
3130
import org.junit.jupiter.api.Test;
31+
import org.junit.jupiter.params.ParameterizedTest;
32+
import org.junit.jupiter.params.provider.CsvSource;
3233

3334
import static org.assertj.core.api.Assertions.assertThat;
3435

@@ -42,7 +43,7 @@ class WarPackagingWebStarterBuildCustomizerTests {
4243

4344
private static final String PLATFORM_VERSION = "1.0.0";
4445

45-
private ProjectDescription projectDescription;
46+
private MutableProjectDescription projectDescription;
4647

4748
@BeforeEach
4849
void setUp() {
@@ -113,6 +114,26 @@ void shouldUseResolvedDependencies() {
113114
assertThat(tomcatDependency.getArtifactId()).isEqualTo("mapped-tomcat");
114115
}
115116

117+
@ParameterizedTest
118+
@CsvSource(textBlock = """
119+
3.4.0,org.springframework.boot:spring-boot-starter-tomcat
120+
3.5.0,org.springframework.boot:spring-boot-starter-tomcat
121+
4.0.0-M1,org.springframework.boot:spring-boot-starter-tomcat
122+
4.0.0-M2,org.springframework.boot:spring-boot-starter-tomcat
123+
4.0.0-M3,org.springframework.boot:spring-boot-starter-tomcat
124+
4.0.0-RC1,org.springframework.boot:spring-boot-tomcat-runtime
125+
4.0.0,org.springframework.boot:spring-boot-tomcat-runtime
126+
""")
127+
void shouldAddSpringBootTomcatRuntimeForBoot4Rc1(String bootVersion, String coordinates) {
128+
InitializrMetadata metadata = InitializrMetadataTestBuilder.withDefaults().build();
129+
this.projectDescription.setPlatformVersion(Version.parse(bootVersion));
130+
Build build = createBuild(metadata);
131+
new WarPackagingWebStarterBuildCustomizer(metadata, this.projectDescription).customize(build);
132+
io.spring.initializr.generator.buildsystem.Dependency tomcat = build.dependencies().get("tomcat");
133+
String actualCoordinates = tomcat.getGroupId() + ":" + tomcat.getArtifactId();
134+
assertThat(actualCoordinates).isEqualTo(coordinates);
135+
}
136+
116137
private Build createBuild(InitializrMetadata metadata) {
117138
return new MavenBuild(new MetadataBuildItemResolver(metadata, Version.parse("2.0.0.RELEASE")));
118139
}

0 commit comments

Comments
 (0)