1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.logging;
20
21 import org.apache.maven.execution.ExecutionEvent;
22 import org.apache.maven.execution.ExecutionListener;
23 import org.apache.maven.execution.MavenExecutionRequest;
24 import org.apache.maven.execution.MavenSession;
25 import org.apache.maven.execution.ProjectExecutionEvent;
26 import org.apache.maven.execution.ProjectExecutionListener;
27 import org.apache.maven.lifecycle.LifecycleExecutionException;
28 import org.apache.maven.lifecycle.internal.ReactorBuildStatus;
29
30 public class LoggingExecutionListener implements ExecutionListener, ProjectExecutionListener {
31
32 private final ExecutionListener delegate;
33 private final BuildEventListener buildEventListener;
34
35 public LoggingExecutionListener(ExecutionListener delegate, BuildEventListener buildEventListener) {
36 this.delegate = delegate;
37 this.buildEventListener = buildEventListener;
38 }
39
40 @Override
41 public void beforeProjectExecution(ProjectExecutionEvent projectExecutionEvent)
42 throws LifecycleExecutionException {}
43
44 @Override
45 public void beforeProjectLifecycleExecution(ProjectExecutionEvent projectExecutionEvent)
46 throws LifecycleExecutionException {}
47
48 @Override
49 public void afterProjectExecutionSuccess(ProjectExecutionEvent projectExecutionEvent)
50 throws LifecycleExecutionException {}
51
52 @Override
53 public void afterProjectExecutionFailure(ProjectExecutionEvent projectExecutionEvent) {
54 MavenSession session = projectExecutionEvent.getSession();
55 boolean halted;
56
57 ReactorBuildStatus status =
58 (ReactorBuildStatus) session.getRepositorySession().getData().get(ReactorBuildStatus.class);
59 if (status != null) {
60 halted = status.isHalted();
61 } else {
62
63 Throwable t = projectExecutionEvent.getCause();
64 halted = (t instanceof RuntimeException || !(t instanceof Exception))
65 || !MavenExecutionRequest.REACTOR_FAIL_NEVER.equals(session.getReactorFailureBehavior())
66 && !MavenExecutionRequest.REACTOR_FAIL_AT_END.equals(session.getReactorFailureBehavior());
67 }
68 Throwable cause = projectExecutionEvent.getCause();
69 buildEventListener.executionFailure(
70 projectExecutionEvent.getProject().getArtifactId(), halted, cause != null ? cause.toString() : null);
71 }
72
73 @Override
74 public void projectDiscoveryStarted(ExecutionEvent event) {
75 setMdc(event);
76 delegate.projectDiscoveryStarted(event);
77 }
78
79 @Override
80 public void sessionStarted(ExecutionEvent event) {
81 setMdc(event);
82 buildEventListener.sessionStarted(event);
83 delegate.sessionStarted(event);
84 }
85
86 @Override
87 public void sessionEnded(ExecutionEvent event) {
88 setMdc(event);
89 delegate.sessionEnded(event);
90 }
91
92 @Override
93 public void projectStarted(ExecutionEvent event) {
94 setMdc(event);
95 buildEventListener.projectStarted(event.getProject().getArtifactId());
96 delegate.projectStarted(event);
97 }
98
99 @Override
100 public void projectSucceeded(ExecutionEvent event) {
101 setMdc(event);
102 delegate.projectSucceeded(event);
103 buildEventListener.projectFinished(event.getProject().getArtifactId());
104 }
105
106 @Override
107 public void projectFailed(ExecutionEvent event) {
108 setMdc(event);
109 delegate.projectFailed(event);
110 buildEventListener.projectFinished(event.getProject().getArtifactId());
111 }
112
113 @Override
114 public void projectSkipped(ExecutionEvent event) {
115 setMdc(event);
116 buildEventListener.projectStarted(event.getProject().getArtifactId());
117 delegate.projectSkipped(event);
118 buildEventListener.projectFinished(event.getProject().getArtifactId());
119 }
120
121 @Override
122 public void mojoStarted(ExecutionEvent event) {
123 setMdc(event);
124 buildEventListener.mojoStarted(event);
125 delegate.mojoStarted(event);
126 }
127
128 @Override
129 public void mojoSucceeded(ExecutionEvent event) {
130 setMdc(event);
131 delegate.mojoSucceeded(event);
132 }
133
134 @Override
135 public void mojoFailed(ExecutionEvent event) {
136 setMdc(event);
137 delegate.mojoFailed(event);
138 }
139
140 @Override
141 public void mojoSkipped(ExecutionEvent event) {
142 setMdc(event);
143 delegate.mojoSkipped(event);
144 }
145
146 @Override
147 public void forkStarted(ExecutionEvent event) {
148 setMdc(event);
149 delegate.forkStarted(event);
150 ProjectBuildLogAppender.setForkingProjectId(event.getProject().getArtifactId());
151 }
152
153 @Override
154 public void forkSucceeded(ExecutionEvent event) {
155 delegate.forkSucceeded(event);
156 ProjectBuildLogAppender.setForkingProjectId(null);
157 }
158
159 @Override
160 public void forkFailed(ExecutionEvent event) {
161 delegate.forkFailed(event);
162 ProjectBuildLogAppender.setForkingProjectId(null);
163 }
164
165 @Override
166 public void forkedProjectStarted(ExecutionEvent event) {
167 setMdc(event);
168 delegate.forkedProjectStarted(event);
169 }
170
171 @Override
172 public void forkedProjectSucceeded(ExecutionEvent event) {
173 setMdc(event);
174 delegate.forkedProjectSucceeded(event);
175 ProjectBuildLogAppender.setProjectId(null);
176 }
177
178 @Override
179 public void forkedProjectFailed(ExecutionEvent event) {
180 setMdc(event);
181 delegate.forkedProjectFailed(event);
182 ProjectBuildLogAppender.setProjectId(null);
183 }
184
185 private void setMdc(ExecutionEvent event) {
186 if (event.getProject() != null) {
187 ProjectBuildLogAppender.setProjectId(event.getProject().getArtifactId());
188 }
189 }
190 }