View Javadoc

1   package org.apache.maven.plugin.invoker;
2   
3   /*
4    * Licensed to the Apache Software Foundation (ASF) under one
5    * or more contributor license agreements.  See the NOTICE file
6    * distributed with this work for additional information
7    * regarding copyright ownership.  The ASF licenses this file
8    * to you under the Apache License, Version 2.0 (the
9    * "License"); you may not use this file except in compliance
10   * with the License.  You may obtain a copy of the License at
11   *
12   *  http://www.apache.org/licenses/LICENSE-2.0
13   *
14   * Unless required by applicable law or agreed to in writing,
15   * software distributed under the License is distributed on an
16   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17   * KIND, either express or implied.  See the License for the
18   * specific language governing permissions and limitations
19   * under the License.
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.plugin.invoker.model.io.xpp3.BuildJobXpp3Reader;
26  import org.codehaus.plexus.util.ReaderFactory;
27  import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
28  
29  import java.io.File;
30  import java.io.IOException;
31  
32  /**
33   * Checks the results of maven-invoker-plugin based integration tests and fails the build if any tests failed.
34   *
35   * @goal verify
36   * @phase verify
37   * @threadSafe
38   * @author <a href="mailto:olamy@apache.org">olamy</a>
39   * @since 1.4
40   */
41  public class VerifyMojo extends AbstractMojo
42  {
43  
44      /**
45       * Flag used to suppress certain invocations. This is useful in tailoring the build using profiles.
46       *
47       * @parameter expression="${invoker.skip}" default-value="false"
48       * @since 1.1
49       */
50      private boolean skipInvocation;
51  
52      /**
53       * Base directory where all build reports are read from.
54       *
55       * @parameter expression="${invoker.reportsDirectory}" default-value="${project.build.directory}/invoker-reports"
56       * @since 1.4
57       */
58      private File reportsDirectory;
59  
60      /**
61       * A flag controlling whether failures of the sub builds should fail the main build, too. If set to
62       * <code>true</code>, the main build will proceed even if one or more sub builds failed.
63       *
64       * @parameter expression="${maven.test.failure.ignore}" default-value="false"
65       * @since 1.3
66       */
67      private boolean ignoreFailures;
68  
69      /**
70       * Flag used to suppress the summary output notifying of successes and failures. If set to <code>true</code>, the
71       * only indication of the build's success or failure will be the effect it has on the main build (if it fails, the
72       * main build should fail as well).
73       *
74       * @parameter default-value="false"
75       */
76      private boolean suppressSummaries;
77  
78      /**
79       * Invokes Maven on the configured test projects.
80       *
81       * @throws org.apache.maven.plugin.MojoExecutionException If the goal encountered severe errors.
82       * @throws org.apache.maven.plugin.MojoFailureException If any of the Maven builds failed.
83       */
84      public void execute()
85          throws MojoExecutionException, MojoFailureException
86      {
87          if ( skipInvocation )
88          {
89              getLog().info( "Skipping invocation per configuration."
90                  + " If this is incorrect, ensure the skipInvocation parameter is not set to true." );
91              return;
92          }
93  
94          File[] reportFiles = ReportUtils.getReportFiles( reportsDirectory );
95          if ( reportFiles.length <= 0 )
96          {
97              getLog().info( "No invoker report files found, nothing to check." );
98              return;
99          }
100 
101         InvokerSession invokerSession = new InvokerSession();
102         for ( int i = 0, size = reportFiles.length; i < size; i++ )
103         {
104             File reportFile = reportFiles[i];
105             try
106             {
107                 BuildJobXpp3Reader reader = new BuildJobXpp3Reader();
108                 invokerSession.addJob( reader.read( ReaderFactory.newXmlReader( reportFile ) ) );
109             }
110             catch ( XmlPullParserException e )
111             {
112                 throw new MojoExecutionException( "Failed to parse report file: " + reportFile, e );
113             }
114             catch ( IOException e )
115             {
116                 throw new MojoExecutionException( "Failed to read report file: " + reportFile, e );
117             }
118         }
119 
120         if ( !suppressSummaries )
121         {
122             invokerSession.logSummary( getLog(), ignoreFailures );
123         }
124 
125         invokerSession.handleFailures( getLog(), ignoreFailures );
126     }
127 
128 }