27
27
import java .util .function .Consumer ;
28
28
29
29
/**
30
- * Execute Maven goals and prpivide the provide a {@link Consumer} for
30
+ * Execute Maven goals and provides the current MavenSession to a custom listener.
31
31
*
32
32
* @author Fabian Krüger
33
33
*/
@@ -38,11 +38,13 @@ class MavenExecutor {
38
38
private final MavenExecutionRequestFactory requestFactory ;
39
39
private final MavenPlexusContainerFactory containerFactory ;
40
40
41
+
41
42
/**
42
- * Runs given {@code goals} in Maven and calls {@code eventConsumer} when {@link org.apache.maven.execution.ExecutionListener#projectSucceeded(ExecutionEvent)} is called
43
- * providing the current {@link MavenSession}.
43
+ * Runs given {@code goals} in Maven and calls {@code eventConsumer} when Maven calls {@link org.apache.maven.execution.ExecutionListener#projectSucceeded(ExecutionEvent)}.
44
+ * The {@code eventConsumer} will be provided with the current {@link MavenSession} through the {@link ExecutionEvent }.
44
45
*/
45
- void runAfterMavenGoals (Path baseDir , PlexusContainer plexusContainer , List <String > goals , Consumer <ExecutionEvent > eventConsumer ) {
46
+ public void onProjectSucceededEvent (Path baseDir , List <String > goals , Consumer <ExecutionEvent > eventConsumer ) {
47
+ PlexusContainer plexusContainer = containerFactory .create ();
46
48
AbstractExecutionListener executionListener = new AbstractExecutionListener () {
47
49
@ Override
48
50
public void mojoFailed (ExecutionEvent event ) {
@@ -55,49 +57,34 @@ public void mojoFailed(ExecutionEvent event) {
55
57
public void projectSucceeded (ExecutionEvent event ) {
56
58
eventConsumer .accept (event );
57
59
}
58
- };
59
- MavenExecutionRequest request = requestFactory .createMavenExecutionRequest (plexusContainer , baseDir );
60
- runWithListener (baseDir , request , plexusContainer , goals , executionListener );
61
60
62
- }
63
-
64
- void runAfterMavenGoals (Path baseDir , List <String > goals , Consumer <ExecutionEvent > eventConsumer ) {
65
- PlexusContainer plexusContainer = containerFactory .create (baseDir );
66
- runAfterMavenGoals (baseDir , plexusContainer , goals , eventConsumer );
67
- }
68
-
69
- // FIXME: goals are part of the request and request goals param can be removed
70
- void runAfterMavenGoals (Path baseDir , MavenExecutionRequest request , PlexusContainer plexusContainer , List <String > goals , AbstractExecutionListener listener ) {
71
- runWithListener (baseDir ,
72
- request ,
73
- plexusContainer ,
74
- goals ,
75
- listener );
76
- }
77
-
78
- private void runWithListener (Path baseDir , MavenExecutionRequest request , PlexusContainer plexusContainer , List <String > goals , AbstractExecutionListener executionListener ) {
79
- try {
80
- request .setExecutionListener (executionListener );
81
- Maven maven = plexusContainer .lookup (Maven .class );
82
- MavenExecutionResult execute = maven .execute (request );
83
- if (execute .hasExceptions ()) {
84
- throw new ParsingException ("Maven could not run %s on project '%s'" .formatted (goals , baseDir ), execute .getExceptions ());
61
+ @ Override
62
+ public void projectFailed (ExecutionEvent event ) {
63
+ super .projectFailed (event );
64
+ throw new RuntimeException ("Exception while executing Maven project: " + event .getProject ().getName (), event .getException ());
85
65
}
86
- } catch (ComponentLookupException e ) {
87
- throw new RuntimeException (e );
88
- }
66
+ };
67
+ MavenExecutionRequest request = requestFactory .createMavenExecutionRequest (plexusContainer , baseDir );
68
+ request .setGoals (goals );
69
+ request .setExecutionListener (executionListener );
70
+ execute (request );
89
71
}
90
72
91
- public void execute (Path baseDir , MavenExecutionRequest request , PlexusContainer plexusContainer ) {
73
+ /**
74
+ * Executes the {@code request} against Maven.
75
+ *
76
+ * @see MavenExecutionRequestFactory
77
+ */
78
+ public void execute (MavenExecutionRequest request ) {
92
79
try {
80
+ PlexusContainer plexusContainer = containerFactory .create ();
93
81
Maven maven = plexusContainer .lookup (Maven .class );
94
82
MavenExecutionResult execute = maven .execute (request );
95
83
if (execute .hasExceptions ()) {
96
- throw new ParsingException ("Maven could not run %s on project '%s'" .formatted (request .getGoals (), baseDir ), execute .getExceptions ());
84
+ throw new ParsingException ("Maven could not run %s on project '%s'" .formatted (request .getGoals (), request . getBaseDirectory () ), execute .getExceptions ());
97
85
}
98
86
} catch (ComponentLookupException e ) {
99
87
throw new RuntimeException (e );
100
-
101
88
}
102
89
}
103
90
}
0 commit comments