View Javadoc
1   package org.apache.maven.project;
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.model.building.ModelProblem;
23  import org.apache.maven.model.building.ModelProblemUtils;
24  
25  import java.io.File;
26  import java.io.PrintWriter;
27  import java.io.StringWriter;
28  import java.util.List;
29  
30  /**
31   * @author Jason van Zyl
32   */
33  public class ProjectBuildingException
34      extends Exception
35  {
36      private final String projectId;
37  
38      private File pomFile;
39  
40      private List<ProjectBuildingResult> results;
41  
42      public ProjectBuildingException( String projectId, String message, Throwable cause )
43      {
44          super( createMessage( message, projectId, null ), cause );
45          this.projectId = projectId;
46      }
47  
48      /**
49       * @param projectId
50       * @param message
51       * @param pomFile   pom file location
52       */
53      public ProjectBuildingException( String projectId, String message, File pomFile )
54      {
55          super( createMessage( message, projectId, pomFile ) );
56          this.projectId = projectId;
57          this.pomFile = pomFile;
58      }
59  
60      /**
61       * @param projectId
62       * @param message
63       * @param pomFile   pom file location
64       * @param cause
65       */
66      protected ProjectBuildingException( String projectId, String message, File pomFile, Throwable cause )
67      {
68          super( createMessage( message, projectId, pomFile ), cause );
69          this.projectId = projectId;
70          this.pomFile = pomFile;
71      }
72  
73      public ProjectBuildingException( List<ProjectBuildingResult> results )
74      {
75          super( createMessage( results ) );
76          this.projectId = "";
77          this.results = results;
78      }
79  
80      public File getPomFile()
81      {
82          return pomFile;
83      }
84  
85      /**
86       * @deprecated use {@link #getPomFile()}
87       */
88      @Deprecated
89      public String getPomLocation()
90      {
91          if ( getPomFile() != null )
92          {
93              return getPomFile().getAbsolutePath();
94          }
95          else
96          {
97              return "null";
98          }
99      }
100 
101     public String getProjectId()
102     {
103         return projectId;
104     }
105 
106     public List<ProjectBuildingResult> getResults()
107     {
108         return results;
109     }
110 
111     private static String createMessage( String message, String projectId, File pomFile )
112     {
113         StringBuilder buffer = new StringBuilder( 256 );
114         buffer.append( message );
115         buffer.append( " for project " ).append( projectId );
116         if ( pomFile != null )
117         {
118             buffer.append( " at " ).append( pomFile.getAbsolutePath() );
119         }
120         return buffer.toString();
121     }
122 
123     private static String createMessage( List<ProjectBuildingResult> results )
124     {
125         StringWriter buffer = new StringWriter( 1024 );
126         PrintWriter writer = new PrintWriter( buffer );
127         writer.println( "Some problems were encountered while processing the POMs:" );
128         try
129         {
130 
131             for ( ProjectBuildingResult result : results )
132             {
133                 for ( ModelProblem problem : result.getProblems() )
134                 {
135                     writer.print( "[" );
136                     writer.print( problem.getSeverity() );
137                     writer.print( "] " );
138                     writer.print( problem.getMessage() );
139                     writer.print( " @ " );
140                     writer.println( ModelProblemUtils.formatLocation( problem, result.getProjectId() ) );
141                 }
142             }
143         }
144         finally
145         {
146             writer.close();
147         }
148         return buffer.toString();
149     }
150 
151 }