Skip to content

Commit df28c8a

Browse files
committed
Resolve dependencies in WarPackagingWebStarterBuildCustomizer
Closes gh-1707
1 parent 48c1969 commit df28c8a

File tree

2 files changed

+44
-5
lines changed

2 files changed

+44
-5
lines changed

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

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
import io.spring.initializr.generator.buildsystem.Build;
2020
import io.spring.initializr.generator.project.ProjectDescription;
21+
import io.spring.initializr.generator.version.Version;
2122
import io.spring.initializr.metadata.Dependency;
2223
import io.spring.initializr.metadata.InitializrMetadata;
2324
import io.spring.initializr.metadata.support.MetadataBuildItemMapper;
@@ -30,29 +31,35 @@
3031
*
3132
* @author Andy Wilkinson
3233
* @author Stephane Nicoll
34+
* @author Moritz Halbritter
3335
*/
3436
public class WarPackagingWebStarterBuildCustomizer implements BuildCustomizer<Build> {
3537

3638
private final InitializrMetadata metadata;
3739

40+
private final Version platformVersion;
41+
3842
private final BuildMetadataResolver buildMetadataResolver;
3943

4044
public WarPackagingWebStarterBuildCustomizer(InitializrMetadata metadata, ProjectDescription projectDescription) {
4145
this.metadata = metadata;
42-
this.buildMetadataResolver = new BuildMetadataResolver(metadata, projectDescription.getPlatformVersion());
46+
this.platformVersion = projectDescription.getPlatformVersion();
47+
this.buildMetadataResolver = new BuildMetadataResolver(metadata, this.platformVersion);
4348
}
4449

4550
@Override
4651
public void customize(Build build) {
4752
if (!this.buildMetadataResolver.hasFacet(build, "web")) {
4853
// Need to be able to bootstrap the web app
4954
Dependency dependency = determineWebDependency(this.metadata);
50-
build.dependencies().add(dependency.getId(), MetadataBuildItemMapper.toDependency(dependency));
55+
build.dependencies()
56+
.add(dependency.getId(),
57+
MetadataBuildItemMapper.toDependency(dependency.resolve(this.platformVersion)));
5158
}
5259
// Add the tomcat starter in provided scope
53-
Dependency tomcat = Dependency.createSpringBootStarter("tomcat");
60+
Dependency tomcat = determineTomcatDependency(this.metadata);
5461
tomcat.setScope(Dependency.SCOPE_PROVIDED);
55-
build.dependencies().add("tomcat", MetadataBuildItemMapper.toDependency(tomcat));
62+
build.dependencies().add("tomcat", MetadataBuildItemMapper.toDependency(tomcat.resolve(this.platformVersion)));
5663
}
5764

5865
@Override
@@ -65,4 +72,9 @@ private Dependency determineWebDependency(InitializrMetadata metadata) {
6572
return (web != null) ? web : Dependency.createSpringBootStarter("web");
6673
}
6774

75+
private Dependency determineTomcatDependency(InitializrMetadata metadata) {
76+
Dependency tomcat = metadata.getDependencies().get("tomcat");
77+
return (tomcat != null) ? tomcat : Dependency.createSpringBootStarter("tomcat");
78+
}
79+
6880
}

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

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,15 +36,18 @@
3636
* Tests for {@link WarPackagingWebStarterBuildCustomizer}.
3737
*
3838
* @author Stephane Nicoll
39+
* @author Moritz Halbritter
3940
*/
4041
class WarPackagingWebStarterBuildCustomizerTests {
4142

43+
private static final String PLATFORM_VERSION = "1.0.0";
44+
4245
private ProjectDescription projectDescription;
4346

4447
@BeforeEach
4548
void setUp() {
4649
MutableProjectDescription description = new MutableProjectDescription();
47-
description.setPlatformVersion(Version.parse("1.0.0"));
50+
description.setPlatformVersion(Version.parse(PLATFORM_VERSION));
4851
this.projectDescription = description;
4952
}
5053

@@ -86,6 +89,30 @@ void addWebStarterDoesNotReplaceWebFacetDependency() {
8689
assertThat(build.dependencies().ids()).containsOnly("test", "tomcat");
8790
}
8891

92+
@Test
93+
void shouldUseResolvedDependencies() {
94+
Dependency web = Dependency.withId("web", "com.example", "web", null, Dependency.SCOPE_COMPILE);
95+
Dependency.Mapping webMapping = new Dependency.Mapping();
96+
webMapping.setCompatibilityRange(PLATFORM_VERSION);
97+
webMapping.setArtifactId("mapped-web");
98+
web.getMappings().add(webMapping);
99+
Dependency tomcat = Dependency.withId("tomcat", "com.example", "tomcat", null, Dependency.SCOPE_COMPILE);
100+
Dependency.Mapping tomcatMapping = new Dependency.Mapping();
101+
tomcatMapping.setCompatibilityRange(PLATFORM_VERSION);
102+
tomcatMapping.setArtifactId("mapped-tomcat");
103+
tomcat.getMappings().add(tomcatMapping);
104+
InitializrMetadata metadata = InitializrMetadataTestBuilder.withDefaults()
105+
.addDependencyGroup("web", web, tomcat)
106+
.build();
107+
Build build = createBuild(metadata);
108+
new WarPackagingWebStarterBuildCustomizer(metadata, this.projectDescription).customize(build);
109+
assertThat(build.dependencies().ids()).containsOnly("web", "tomcat");
110+
io.spring.initializr.generator.buildsystem.Dependency webDependency = build.dependencies().get("web");
111+
assertThat(webDependency.getArtifactId()).isEqualTo("mapped-web");
112+
io.spring.initializr.generator.buildsystem.Dependency tomcatDependency = build.dependencies().get("tomcat");
113+
assertThat(tomcatDependency.getArtifactId()).isEqualTo("mapped-tomcat");
114+
}
115+
89116
private Build createBuild(InitializrMetadata metadata) {
90117
return new MavenBuild(new MetadataBuildItemResolver(metadata, Version.parse("2.0.0.RELEASE")));
91118
}

0 commit comments

Comments
 (0)