11package org .openapitools .openapidiff .maven ;
22
3+ import static org .openapitools .openapidiff .core .utils .FileUtils .writeToFile ;
4+
35import java .io .ByteArrayOutputStream ;
6+ import java .io .IOException ;
47import java .io .OutputStreamWriter ;
8+ import java .io .UncheckedIOException ;
59import org .apache .maven .plugin .AbstractMojo ;
610import org .apache .maven .plugin .MojoExecutionException ;
711import org .apache .maven .plugin .MojoFailureException ;
1115import org .openapitools .openapidiff .core .OpenApiCompare ;
1216import org .openapitools .openapidiff .core .model .ChangedOpenApi ;
1317import org .openapitools .openapidiff .core .output .ConsoleRender ;
18+ import org .openapitools .openapidiff .core .output .JsonRender ;
19+ import org .openapitools .openapidiff .core .output .MarkdownRender ;
1420
1521/** A Maven Mojo that diffs two OpenAPI specifications and reports on differences. */
1622@ Mojo (name = "diff" , defaultPhase = LifecyclePhase .TEST )
1723public class OpenApiDiffMojo extends AbstractMojo {
24+
1825 @ Parameter (property = "oldSpec" )
1926 String oldSpec ;
2027
@@ -30,6 +37,15 @@ public class OpenApiDiffMojo extends AbstractMojo {
3037 @ Parameter (property = "skip" , defaultValue = "false" )
3138 Boolean skip = false ;
3239
40+ @ Parameter (property = "consoleOutputFileName" )
41+ String consoleOutputFileName ;
42+
43+ @ Parameter (property = "jsonOutputFileName" )
44+ String jsonOutputFileName ;
45+
46+ @ Parameter (property = "markdownOutputFileName" )
47+ String markdownOutputFileName ;
48+
3349 @ Override
3450 public void execute () throws MojoExecutionException , MojoFailureException {
3551 if (Boolean .TRUE .equals (skip )) {
@@ -39,10 +55,18 @@ public void execute() throws MojoExecutionException, MojoFailureException {
3955
4056 try {
4157 final ChangedOpenApi diff = OpenApiCompare .fromLocations (oldSpec , newSpec );
42- ByteArrayOutputStream outputStream = new ByteArrayOutputStream ();
43- OutputStreamWriter outputStreamWriter = new OutputStreamWriter (outputStream );
44- new ConsoleRender ().render (diff , outputStreamWriter );
45- getLog ().info (outputStream .toString ());
58+
59+ try (ByteArrayOutputStream outputStream = new ByteArrayOutputStream ();
60+ OutputStreamWriter outputStreamWriter = new OutputStreamWriter (outputStream )) {
61+ new ConsoleRender ().render (diff , outputStreamWriter );
62+ getLog ().info (outputStream .toString ());
63+ } catch (IOException e ) {
64+ throw new UncheckedIOException (e );
65+ }
66+
67+ writeDiffAsTextToFile (diff );
68+ writeDiffAsJsonToFile (diff );
69+ writeDiffAsMarkdownToFile (diff );
4670
4771 if (failOnIncompatible && diff .isIncompatible ()) {
4872 throw new BackwardIncompatibilityException ("The API changes broke backward compatibility" );
@@ -55,4 +79,16 @@ public void execute() throws MojoExecutionException, MojoFailureException {
5579 throw new MojoExecutionException ("Unexpected error" , e );
5680 }
5781 }
82+
83+ private void writeDiffAsTextToFile (final ChangedOpenApi diff ) {
84+ writeToFile (new ConsoleRender (), diff , consoleOutputFileName );
85+ }
86+
87+ private void writeDiffAsJsonToFile (final ChangedOpenApi diff ) {
88+ writeToFile (new JsonRender (), diff , jsonOutputFileName );
89+ }
90+
91+ private void writeDiffAsMarkdownToFile (final ChangedOpenApi diff ) {
92+ writeToFile (new MarkdownRender (), diff , markdownOutputFileName );
93+ }
5894}
0 commit comments