Skip to content

Commit 6b24dca

Browse files
committed
Merge pull request #1650 from dsyer
* pr/1650: Polish "Add support for processing instructions (e.g. m2e) in plugin" Add support for processing instructions (e.g. m2e) in plugin Closes gh-1650
2 parents 74a74b6 + 471a374 commit 6b24dca

File tree

3 files changed

+72
-2
lines changed

3 files changed

+72
-2
lines changed

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -454,6 +454,10 @@ else if (setting.getValue() instanceof List) {
454454

455455
private void writePluginExecution(IndentingWriter writer, Execution execution) {
456456
writeElement(writer, "execution", () -> {
457+
List<String> processingInstructions = execution.getProcessingInstructions();
458+
for (String instruction : processingInstructions) {
459+
writeProcessingInstruction(writer, instruction);
460+
}
457461
writeSingleElement(writer, "id", execution.getId());
458462
writeSingleElement(writer, "phase", execution.getPhase());
459463
List<String> goals = execution.getGoals();
@@ -636,6 +640,10 @@ private void writeSingleElement(IndentingWriter writer, String name, Object valu
636640
}
637641
}
638642

643+
private void writeProcessingInstruction(IndentingWriter writer, String content) {
644+
writer.println(String.format("<?%s?>", content));
645+
}
646+
639647
private void writeElement(IndentingWriter writer, String name, Runnable withContent) {
640648
writer.println(String.format("<%s>", name));
641649
writer.indented(withContent);

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

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -286,6 +286,8 @@ public static class ExecutionBuilder {
286286

287287
private final List<String> goals = new ArrayList<>();
288288

289+
private final List<String> processingInstructions = new ArrayList<>();
290+
289291
private ConfigurationBuilder configurationCustomization = null;
290292

291293
/**
@@ -298,7 +300,8 @@ public ExecutionBuilder(String id) {
298300

299301
Execution build() {
300302
return new Execution(this.id, this.phase, this.goals,
301-
(this.configurationCustomization == null) ? null : this.configurationCustomization.build());
303+
(this.configurationCustomization == null) ? null : this.configurationCustomization.build(),
304+
this.processingInstructions);
302305
}
303306

304307
/**
@@ -321,6 +324,25 @@ public ExecutionBuilder goal(String goal) {
321324
return this;
322325
}
323326

327+
/**
328+
* Add a processing instruction to invoke for this execution.
329+
* @param content the processing instruction to add
330+
* @return this for method chaining
331+
*/
332+
public ExecutionBuilder processingInstruction(String content) {
333+
this.processingInstructions.add(content);
334+
return this;
335+
}
336+
337+
/**
338+
* Add a m2e hint, e.g. "execute onConfiguration,onIncremental" or "ignore".
339+
* @param hint the hint to add
340+
* @return this for method chaining
341+
*/
342+
public ExecutionBuilder m2e(String hint) {
343+
return processingInstruction("m2e " + hint);
344+
}
345+
324346
/**
325347
* Customize the {@code configuration} of the execution using the specified
326348
* consumer.
@@ -487,11 +509,15 @@ public static final class Execution {
487509

488510
private final Configuration configuration;
489511

490-
private Execution(String id, String phase, List<String> goals, Configuration configuration) {
512+
private final List<String> processingInstructions;
513+
514+
private Execution(String id, String phase, List<String> goals, Configuration configuration,
515+
List<String> processingInstructions) {
491516
this.id = id;
492517
this.phase = phase;
493518
this.goals = Collections.unmodifiableList(goals);
494519
this.configuration = configuration;
520+
this.processingInstructions = processingInstructions;
495521
}
496522

497523
/**
@@ -526,6 +552,10 @@ public Configuration getConfiguration() {
526552
return this.configuration;
527553
}
528554

555+
public List<String> getProcessingInstructions() {
556+
return this.processingInstructions;
557+
}
558+
529559
}
530560

531561
/**

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

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import io.spring.initializr.generator.version.VersionProperty;
3131
import io.spring.initializr.generator.version.VersionReference;
3232
import org.junit.jupiter.api.Test;
33+
import org.w3c.dom.Node;
3334

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

@@ -685,6 +686,37 @@ void pomWithPluginWithExecution() {
685686
});
686687
}
687688

689+
@Test
690+
void pomWithPluginWithExecutionAndIdeHint() {
691+
MavenBuild build = new MavenBuild();
692+
build.settings().coordinates("com.example.demo", "demo");
693+
build.plugins().add("org.asciidoctor", "asciidoctor-maven-plugin", (plugin) -> {
694+
plugin.version("1.5.3");
695+
plugin.execution("generateProject-docs", (execution) -> {
696+
execution.m2e("ignore");
697+
execution.goal("process-asciidoc");
698+
});
699+
});
700+
generatePom(build, (pom) -> {
701+
NodeAssert plugin = pom.nodeAtPath("/project/build/plugins/plugin");
702+
assertThat(plugin).textAtPath("groupId").isEqualTo("org.asciidoctor");
703+
assertThat(plugin).textAtPath("artifactId").isEqualTo("asciidoctor-maven-plugin");
704+
assertThat(plugin).textAtPath("version").isEqualTo("1.5.3");
705+
NodeAssert execution = plugin.nodeAtPath("executions/execution");
706+
assertThat(execution).textAtPath("id").isEqualTo("generateProject-docs");
707+
assertThat(execution).matches((node) -> {
708+
Node child = node.getFirstChild();
709+
while (child != null) {
710+
if (child.getNodeType() == Node.PROCESSING_INSTRUCTION_NODE) {
711+
return child.getNodeName().equals("m2e") && child.getTextContent().equals("ignore");
712+
}
713+
child = child.getNextSibling();
714+
}
715+
return false;
716+
}, "m2e:ignore");
717+
});
718+
}
719+
688720
@Test
689721
void pomWithPluginWithDependency() {
690722
MavenBuild build = new MavenBuild();

0 commit comments

Comments
 (0)