Skip to content

Commit 42d4671

Browse files
committed
Cleaned up MavenExecutor
1 parent c211d26 commit 42d4671

File tree

4 files changed

+28
-40
lines changed

4 files changed

+28
-40
lines changed

sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/MavenExecutor.java

Lines changed: 23 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
import java.util.function.Consumer;
2828

2929
/**
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.
3131
*
3232
* @author Fabian Krüger
3333
*/
@@ -38,11 +38,13 @@ class MavenExecutor {
3838
private final MavenExecutionRequestFactory requestFactory;
3939
private final MavenPlexusContainerFactory containerFactory;
4040

41+
4142
/**
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}.
4445
*/
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();
4648
AbstractExecutionListener executionListener = new AbstractExecutionListener() {
4749
@Override
4850
public void mojoFailed(ExecutionEvent event) {
@@ -55,49 +57,34 @@ public void mojoFailed(ExecutionEvent event) {
5557
public void projectSucceeded(ExecutionEvent event) {
5658
eventConsumer.accept(event);
5759
}
58-
};
59-
MavenExecutionRequest request = requestFactory.createMavenExecutionRequest(plexusContainer, baseDir);
60-
runWithListener(baseDir, request, plexusContainer, goals, executionListener);
6160

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());
8565
}
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);
8971
}
9072

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) {
9279
try {
80+
PlexusContainer plexusContainer = containerFactory.create();
9381
Maven maven = plexusContainer.lookup(Maven.class);
9482
MavenExecutionResult execute = maven.execute(request);
9583
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());
9785
}
9886
} catch (ComponentLookupException e) {
9987
throw new RuntimeException(e);
100-
10188
}
10289
}
10390
}

sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/MavenProjectFactory.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ public void sessionStarted(ExecutionEvent event) {
8484
}
8585
});
8686
request.setGoals(List.of("validate"));
87-
mavenExecutor.execute(baseDir, request, plexusContainer);
87+
mavenExecutor.execute(request);
8888
return projectAtomicReference.get();
8989
} catch (ComponentLookupException e) {
9090
throw new RuntimeException(e);

sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/RewriteMavenProjectParser.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -103,9 +103,8 @@ public RewriteProjectParsingResult parse(Path baseDir, boolean pomCacheEnabled,
103103

104104
private RewriteProjectParsingResult parseInternal(Path baseDir, boolean pomCacheEnabled, String pomCacheDirectory, boolean skipMavenParsing, Collection<String> plainTextMasks, int sizeThreshold, boolean runPerSubmodule, ExecutionContext executionContext, Path absoluteBaseDir, Collection<String> allExclusions, PlexusContainer plexusContainer) {
105105
AtomicReference<RewriteProjectParsingResult> parsingResult = new AtomicReference<>();
106-
mavenRunner.runAfterMavenGoals(
106+
mavenRunner.onProjectSucceededEvent(
107107
baseDir,
108-
plexusContainer,
109108
List.of("clean", "package"),
110109
event -> {
111110
List<MavenProject> projects = event.getSession().getProjectDependencyGraph().getAllProjects();

sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/MavenExecutorTest.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,10 @@ void verifyMavenSessionWhenRunningInMaven() {
3535
MavenExecutor sut = new MavenExecutor(requestFactory, containerFactory);
3636
Path baseDir = Path.of("./testcode/maven-projects/maven-config");
3737
List<String> goals = List.of("clean", "install");
38-
sut.runAfterMavenGoals(baseDir, goals, event -> {
38+
sut.onProjectSucceededEvent(baseDir, goals, event -> {
3939
assertThat(event.getSession()).isNotNull();
4040
});
4141
}
42+
43+
4244
}

0 commit comments

Comments
 (0)