1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.execution;
20
21 import javax.inject.Named;
22 import javax.inject.Singleton;
23
24 import java.util.List;
25 import java.util.Optional;
26 import java.util.stream.Collectors;
27
28 import org.apache.maven.project.MavenProject;
29 import org.slf4j.Logger;
30 import org.slf4j.LoggerFactory;
31
32
33
34
35 @Named
36 @Singleton
37 public class DefaultBuildResumptionAnalyzer implements BuildResumptionAnalyzer {
38 private static final Logger LOGGER = LoggerFactory.getLogger(DefaultBuildResumptionAnalyzer.class);
39
40 @Override
41 public Optional<BuildResumptionData> determineBuildResumptionData(final MavenExecutionResult result) {
42 if (!result.hasExceptions()) {
43 return Optional.empty();
44 }
45
46 List<MavenProject> sortedProjects = result.getTopologicallySortedProjects();
47
48 boolean hasNoSuccess =
49 sortedProjects.stream().noneMatch(project -> result.getBuildSummary(project) instanceof BuildSuccess);
50
51 if (hasNoSuccess) {
52 return Optional.empty();
53 }
54
55 List<String> remainingProjects = sortedProjects.stream()
56 .filter(project -> result.getBuildSummary(project) == null
57 || result.getBuildSummary(project) instanceof BuildFailure)
58 .map(project -> project.getGroupId() + ":" + project.getArtifactId())
59 .collect(Collectors.toList());
60
61 if (remainingProjects.isEmpty()) {
62 LOGGER.info("No remaining projects found, resuming the build would not make sense.");
63 return Optional.empty();
64 }
65
66 return Optional.of(new BuildResumptionData(remainingProjects));
67 }
68 }