1 package org.apache.maven.plugins.invoker;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import org.apache.maven.plugin.AbstractMojo;
23 import org.apache.maven.plugin.MojoExecutionException;
24 import org.apache.maven.plugin.MojoFailureException;
25 import org.apache.maven.plugins.invoker.model.io.xpp3.BuildJobXpp3Reader;
26 import org.apache.maven.plugins.annotations.LifecyclePhase;
27 import org.apache.maven.plugins.annotations.Mojo;
28 import org.apache.maven.plugins.annotations.Parameter;
29 import org.codehaus.plexus.util.ReaderFactory;
30 import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
31
32 import java.io.File;
33 import java.io.IOException;
34 import java.io.Reader;
35
36
37
38
39
40
41
42 @Mojo( name = "verify", defaultPhase = LifecyclePhase.VERIFY, threadSafe = true )
43 public class VerifyMojo
44 extends AbstractMojo
45 {
46
47
48
49
50
51
52 @Parameter( property = "invoker.skip", defaultValue = "false" )
53 private boolean skipInvocation;
54
55
56
57
58
59
60 @Parameter( property = "invoker.reportsDirectory", defaultValue = "${project.build.directory}/invoker-reports" )
61 private File reportsDirectory;
62
63
64
65
66
67
68
69 @Parameter( property = "maven.test.failure.ignore", defaultValue = "false" )
70 private boolean ignoreFailures;
71
72
73
74
75
76
77 @Parameter( defaultValue = "false" )
78 private boolean suppressSummaries;
79
80
81
82
83
84
85 @Parameter( property = "invoker.failIfNoProjects" )
86 private Boolean failIfNoProjects;
87
88
89
90
91
92
93 @Parameter( property = "invoker.streamLogsOnFailures", defaultValue = "false" )
94 private boolean streamLogsOnFailures;
95
96
97
98
99
100
101
102 public void execute()
103 throws MojoExecutionException, MojoFailureException
104 {
105 if ( skipInvocation )
106 {
107 getLog().info( "Skipping invocation per configuration."
108 + " If this is incorrect, ensure the skipInvocation parameter is not set to true." );
109 return;
110 }
111
112 File[] reportFiles = ReportUtils.getReportFiles( reportsDirectory );
113 if ( reportFiles.length <= 0 )
114 {
115 if ( Boolean.TRUE.equals( failIfNoProjects ) )
116 {
117 throw new MojoFailureException( "No projects to invoke!" );
118 }
119 getLog().info( "No invoker report files found, nothing to check." );
120 return;
121 }
122
123 BuildJobXpp3Reader reader = new BuildJobXpp3Reader();
124
125 InvokerSession invokerSession = new InvokerSession();
126
127 for ( File reportFile : reportFiles )
128 {
129 try ( Reader xmlReader = ReaderFactory.newXmlReader( reportFile ) )
130 {
131 invokerSession.addJob( reader.read( xmlReader ) );
132 }
133 catch ( XmlPullParserException e )
134 {
135 throw new MojoExecutionException( "Failed to parse report file: " + reportFile, e );
136 }
137 catch ( IOException e )
138 {
139 throw new MojoExecutionException( "Failed to read report file: " + reportFile, e );
140 }
141 }
142
143 if ( streamLogsOnFailures )
144 {
145 invokerSession.logFailedBuildLog( getLog(), ignoreFailures );
146 }
147
148 if ( !suppressSummaries )
149 {
150 invokerSession.logSummary( getLog(), ignoreFailures );
151 }
152
153 invokerSession.handleFailures( getLog(), ignoreFailures );
154 }
155
156 }