Skip to content

Commit 7d2bf20

Browse files
committed
Merge pull request #1544 from mzeijen
* pr/1544: Add plugin management to Maven build and profiles Closes gh-1544
2 parents f42994b + edddf9b commit 7d2bf20

File tree

5 files changed

+95
-2
lines changed

5 files changed

+95
-2
lines changed

initializr-generator/src/main/java/io/spring/initializr/generator/buildsystem/maven/MavenBuild.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
* @author Andy Wilkinson
2828
* @author Stephane Nicoll
2929
* @author Niklas Herder
30+
* @author Maurice Zeijen
3031
*/
3132
public class MavenBuild extends Build {
3233

@@ -36,6 +37,8 @@ public class MavenBuild extends Build {
3637

3738
private final MavenResourceContainer testResources = new MavenResourceContainer();
3839

40+
private final MavenPluginContainer pluginManagementPlugins = new MavenPluginContainer();
41+
3942
private final MavenPluginContainer plugins = new MavenPluginContainer();
4043

4144
private final MavenExtensionContainer extensions = new MavenExtensionContainer();
@@ -99,6 +102,15 @@ public MavenResourceContainer testResources() {
99102
return this.testResources;
100103
}
101104

105+
/**
106+
* Return the {@linkplain MavenPluginContainer plugin container} to use to configure
107+
* plugin management plugins.
108+
* @return the {@link MavenPluginContainer}
109+
*/
110+
public MavenPluginContainer pluginManagementPlugins() {
111+
return this.pluginManagementPlugins;
112+
}
113+
102114
/**
103115
* Return the {@linkplain MavenPluginContainer plugin container} to use to configure
104116
* plugins.

initializr-generator/src/main/java/io/spring/initializr/generator/buildsystem/maven/MavenBuildWriter.java

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -359,7 +359,8 @@ private void writeBuild(IndentingWriter writer, MavenBuild build) {
359359
MavenBuildSettings settings = build.getSettings();
360360
if (settings.getDefaultGoal() == null && settings.getFinalName() == null
361361
&& settings.getSourceDirectory() == null && settings.getTestSourceDirectory() == null
362-
&& build.resources().isEmpty() && build.testResources().isEmpty() && build.plugins().isEmpty()
362+
&& build.resources().isEmpty() && build.testResources().isEmpty()
363+
&& build.pluginManagementPlugins().isEmpty() && build.plugins().isEmpty()
363364
&& build.extensions().isEmpty()) {
364365
return;
365366
}
@@ -370,6 +371,7 @@ private void writeBuild(IndentingWriter writer, MavenBuild build) {
370371
writeSingleElement(writer, "sourceDirectory", settings.getSourceDirectory());
371372
writeSingleElement(writer, "testSourceDirectory", settings.getTestSourceDirectory());
372373
writeResources(writer, build.resources(), build.testResources());
374+
writePluginManagement(writer, build.pluginManagementPlugins());
373375
writeCollectionElement(writer, "plugins", build.plugins().values(), this::writePlugin);
374376
writeCollectionElement(writer, "extensions", build.extensions().values(), this::writeExtension);
375377
});
@@ -409,6 +411,13 @@ private void writeResourceExclude(IndentingWriter writer, String exclude) {
409411
writeSingleElement(writer, "exclude", exclude);
410412
}
411413

414+
private void writePluginManagement(IndentingWriter writer, MavenPluginContainer pluginManagementContainer) {
415+
if (!pluginManagementContainer.isEmpty()) {
416+
writeElement(writer, "pluginManagement", () -> writeCollectionElement(writer, "plugins",
417+
pluginManagementContainer.values(), this::writePlugin));
418+
}
419+
}
420+
412421
private void writePlugin(IndentingWriter writer, MavenPlugin plugin) {
413422
writeElement(writer, "plugin", () -> {
414423
writeSingleElement(writer, "groupId", plugin.getGroupId());
@@ -600,13 +609,15 @@ private void writeProfileActivation(IndentingWriter writer, MavenProfileActivati
600609
private void writeProfileBuild(IndentingWriter writer, MavenProfile profile) {
601610
MavenProfile.Settings settings = profile.getSettings();
602611
if (settings.getDefaultGoal() == null && settings.getFinalName() == null && profile.resources().isEmpty()
603-
&& profile.testResources().isEmpty() && profile.plugins().isEmpty()) {
612+
&& profile.testResources().isEmpty() && profile.pluginManagementPlugins().isEmpty()
613+
&& profile.plugins().isEmpty()) {
604614
return;
605615
}
606616
writeElement(writer, "build", () -> {
607617
writeSingleElement(writer, "defaultGoal", settings.getDefaultGoal());
608618
writeSingleElement(writer, "finalName", settings.getFinalName());
609619
writeResources(writer, profile.resources(), profile.testResources());
620+
writePluginManagement(writer, profile.pluginManagementPlugins());
610621
writeCollectionElement(writer, "plugins", profile.plugins().values(), this::writePlugin);
611622
});
612623
}

initializr-generator/src/main/java/io/spring/initializr/generator/buildsystem/maven/MavenProfile.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
*
2828
* @author Daniel Andres Pelaez Lopez
2929
* @author Stephane Nicoll
30+
* @author Maurice Zeijen
3031
*/
3132
public class MavenProfile {
3233

@@ -44,6 +45,8 @@ public class MavenProfile {
4445

4546
private final MavenResourceContainer testResources = new MavenResourceContainer();
4647

48+
private final MavenPluginContainer pluginManagementPlugins = new MavenPluginContainer();
49+
4750
private final MavenPluginContainer plugins = new MavenPluginContainer();
4851

4952
private final BomContainer boms;
@@ -184,6 +187,15 @@ public MavenResourceContainer testResources() {
184187
return this.testResources;
185188
}
186189

190+
/**
191+
* Return the {@linkplain MavenPluginContainer plugin container} to use to configure
192+
* plugin management plugins.
193+
* @return the {@link MavenPluginContainer}
194+
*/
195+
public MavenPluginContainer pluginManagementPlugins() {
196+
return this.pluginManagementPlugins;
197+
}
198+
187199
/**
188200
* Return the {@linkplain MavenPluginContainer plugin container} to use to configure
189201
* plugins.

initializr-generator/src/test/java/io/spring/initializr/generator/buildsystem/maven/MavenBuildTests.java

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,17 @@ void mavenTestResourcesCanBeConfigured() {
5858
});
5959
}
6060

61+
@Test
62+
void mavenPluginManagementCanBeConfigured() {
63+
MavenBuild build = new MavenBuild();
64+
build.pluginManagementPlugins().add("com.example", "test-plugin", (plugin) -> plugin.version("1.2.3"));
65+
assertThat(build.pluginManagementPlugins().values()).singleElement().satisfies((testPlugin) -> {
66+
assertThat(testPlugin.getGroupId()).isEqualTo("com.example");
67+
assertThat(testPlugin.getArtifactId()).isEqualTo("test-plugin");
68+
assertThat(testPlugin.getVersion()).isEqualTo("1.2.3");
69+
});
70+
}
71+
6172
@Test
6273
void mavenPluginCanBeConfigured() {
6374
MavenBuild build = new MavenBuild();
@@ -201,4 +212,20 @@ void mavenProfileCanBeRemoved() {
201212
assertThat(build.profiles().values()).isEmpty();
202213
}
203214

215+
@Test
216+
void mavenPluginManagementInProfileCanBeConfigured() {
217+
MavenBuild build = new MavenBuild();
218+
build.profiles()
219+
.id("test")
220+
.pluginManagementPlugins()
221+
.add("com.example", "test-plugin", (plugin) -> plugin.version("1.2.3"));
222+
assertThat(build.profiles().values()).singleElement()
223+
.satisfies((profile) -> assertThat(profile.pluginManagementPlugins().values()).singleElement()
224+
.satisfies((testPlugin) -> {
225+
assertThat(testPlugin.getGroupId()).isEqualTo("com.example");
226+
assertThat(testPlugin.getArtifactId()).isEqualTo("test-plugin");
227+
assertThat(testPlugin.getVersion()).isEqualTo("1.2.3");
228+
}));
229+
}
230+
204231
}

initializr-generator/src/test/java/io/spring/initializr/generator/buildsystem/maven/MavenBuildWriterTests.java

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -605,6 +605,20 @@ void pomWithTestResources() {
605605
});
606606
}
607607

608+
@Test
609+
void pomWithPluginManagement() {
610+
MavenBuild build = new MavenBuild();
611+
build.settings().coordinates("com.example.demo", "demo");
612+
build.pluginManagementPlugins()
613+
.add("org.springframework.boot", "spring-boot-maven-plugin", (plugin) -> plugin.version("1.2.3"));
614+
generatePom(build, (pom) -> {
615+
NodeAssert plugin = pom.nodeAtPath("/project/build/pluginManagement/plugins/plugin");
616+
assertThat(plugin).textAtPath("groupId").isEqualTo("org.springframework.boot");
617+
assertThat(plugin).textAtPath("artifactId").isEqualTo("spring-boot-maven-plugin");
618+
assertThat(plugin).textAtPath("version").isEqualTo("1.2.3");
619+
});
620+
}
621+
608622
@Test
609623
void pomWithPlugin() {
610624
MavenBuild build = new MavenBuild();
@@ -1185,6 +1199,23 @@ void pomWithProfileTestResources() {
11851199
});
11861200
}
11871201

1202+
@Test
1203+
void pomWithProfilePluginManagement() {
1204+
MavenBuild build = new MavenBuild();
1205+
build.profiles()
1206+
.id("profile1")
1207+
.pluginManagementPlugins()
1208+
.add("org.springframework.boot", "spring-boot-maven-plugin", (plugin) -> plugin.version("1.2.3"));
1209+
generatePom(build, (pom) -> {
1210+
NodeAssert profile = pom.nodeAtPath("/project/profiles/profile");
1211+
assertThat(profile).textAtPath("id").isEqualTo("profile1");
1212+
NodeAssert plugin = profile.nodeAtPath("build/pluginManagement/plugins/plugin");
1213+
assertThat(plugin).textAtPath("groupId").isEqualTo("org.springframework.boot");
1214+
assertThat(plugin).textAtPath("artifactId").isEqualTo("spring-boot-maven-plugin");
1215+
assertThat(plugin).textAtPath("version").isEqualTo("1.2.3");
1216+
});
1217+
}
1218+
11881219
@Test
11891220
void pomWithProfilePlugin() {
11901221
MavenBuild build = new MavenBuild();

0 commit comments

Comments
 (0)