You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by be...@apache.org on 2009/08/06 00:45:15 UTC

svn commit: r801449 - in /maven/components/trunk: maven-core/src/main/java/org/apache/maven/project/ maven-model-builder/src/main/java/org/apache/maven/model/building/

Author: bentmann
Date: Wed Aug  5 22:45:14 2009
New Revision: 801449

URL: http://svn.apache.org/viewvc?rev=801449&view=rev
Log:
o Extended error reporting to provide the id of the POM that failed

Modified:
    maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java
    maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuildingResult.java
    maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/ProjectBuildingResult.java
    maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilder.java
    maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelProblemCollector.java
    maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelBuildingException.java
    maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelProblemUtils.java

Modified: maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java?rev=801449&r1=801448&r2=801449&view=diff
==============================================================================
--- maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java (original)
+++ maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java Wed Aug  5 22:45:14 2009
@@ -113,7 +113,7 @@
             }
             catch ( ModelBuildingException e )
             {
-                throw new ProjectBuildingException( "[unknown]", "Encountered POM errors", pomFile, e );
+                throw new ProjectBuildingException( e.getModelId(), "Encountered POM errors", pomFile, e );
             }
 
             Model model = result.getEffectiveModel();
@@ -327,7 +327,8 @@
                 }
                 catch ( ModelBuildingException e )
                 {
-                    results.add( new DefaultProjectBuildingResult( interimResult.pomFile, e.getProblems() ) );
+                    results.add( new DefaultProjectBuildingResult( e.getModelId(), interimResult.pomFile,
+                                                                   e.getProblems() ) );
 
                     errors = true;
                 }
@@ -431,7 +432,7 @@
             }
             catch ( ModelBuildingException e )
             {
-                results.add( new DefaultProjectBuildingResult( pomFile, e.getProblems() ) );
+                results.add( new DefaultProjectBuildingResult( e.getModelId(), pomFile, e.getProblems() ) );
 
                 errors = true;
             }

Modified: maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuildingResult.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuildingResult.java?rev=801449&r1=801448&r2=801449&view=diff
==============================================================================
--- maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuildingResult.java (original)
+++ maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuildingResult.java Wed Aug  5 22:45:14 2009
@@ -34,6 +34,8 @@
     implements ProjectBuildingResult
 {
 
+    private String projectId;
+
     private File pomFile;
 
     private MavenProject project;
@@ -48,6 +50,7 @@
      */
     public DefaultProjectBuildingResult( MavenProject project, List<ModelProblem> problems )
     {
+        this.projectId = ( project != null ) ? project.getId() : "";
         this.pomFile = ( project != null ) ? project.getFile() : null;
         this.project = project;
         this.problems = problems;
@@ -56,15 +59,22 @@
     /**
      * Creates a new result with the specified contents.
      * 
+     * @param projectId The
      * @param pomFile The POM file from which the project was built, may be {@code null}.
      * @param problems The problems that were encouterned, may be {@code null}.
      */
-    public DefaultProjectBuildingResult( File pomFile, List<ModelProblem> problems )
+    public DefaultProjectBuildingResult( String projectId, File pomFile, List<ModelProblem> problems )
     {
+        this.projectId = ( projectId != null ) ? projectId : "";
         this.pomFile = pomFile;
         this.problems = problems;
     }
 
+    public String getProjectId()
+    {
+        return projectId;
+    }
+
     public File getPomFile()
     {
         return pomFile;

Modified: maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/ProjectBuildingResult.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/ProjectBuildingResult.java?rev=801449&r1=801448&r2=801449&view=diff
==============================================================================
--- maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/ProjectBuildingResult.java (original)
+++ maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/ProjectBuildingResult.java Wed Aug  5 22:45:14 2009
@@ -33,6 +33,15 @@
 {
 
     /**
+     * Gets the identifier of the project that could not be built. The general format of the identifier is {@code
+     * <groupId>:<artifactId>:<version>} but some of these coordinates may still be unknown at the point the exception
+     * is thrown so this information is merely meant to assist the user.
+     * 
+     * @return The identifier of the project or an empty string if not known, never {@code null}.
+     */
+    String getProjectId();
+
+    /**
      * Gets the POM file from which the project was built.
      * 
      * @return The POM file or {@code null} if unknown.

Modified: maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilder.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilder.java?rev=801449&r1=801448&r2=801449&view=diff
==============================================================================
--- maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilder.java (original)
+++ maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilder.java Wed Aug  5 22:45:14 2009
@@ -121,6 +121,8 @@
 
         Model inputModel = readModel( request.getModelSource(), request.getPomFile(), request, problems );
 
+        problems.setRootModel( inputModel );
+
         ModelData resultData = new ModelData( inputModel );
 
         List<ModelData> lineage = new ArrayList<ModelData>();
@@ -170,6 +172,7 @@
         Model resultModel = resultData.getModel();
 
         problems.setSourceHint( resultModel );
+        problems.setRootModel( resultModel );
 
         resultModel = interpolateModel( resultModel, request, problems );
         resultData.setModel( resultModel );
@@ -208,6 +211,7 @@
 
         DefaultModelProblemCollector problems = new DefaultModelProblemCollector( result.getProblems() );
         problems.setSourceHint( resultModel );
+        problems.setRootModel( resultModel );
 
         modelPathTranslator.alignToBaseDirectory( resultModel, resultModel.getProjectDirectory(), request );
 
@@ -237,7 +241,7 @@
 
         if ( hasErrors( problems.getProblems() ) )
         {
-            throw new ModelBuildingException( problems.getProblems() );
+            throw new ModelBuildingException( problems.getRootModelId(), problems.getProblems() );
         }
 
         return result;
@@ -274,13 +278,13 @@
         {
             problems.add( new ModelProblem( "Non-parseable POM " + modelSource.getLocation() + ": " + e.getMessage(),
                                             ModelProblem.Severity.FATAL, modelSource.getLocation(), e ) );
-            throw new ModelBuildingException( problems.getProblems() );
+            throw new ModelBuildingException( problems.getRootModelId(), problems.getProblems() );
         }
         catch ( IOException e )
         {
             problems.add( new ModelProblem( "Non-readable POM " + modelSource.getLocation() + ": " + e.getMessage(),
                                             ModelProblem.Severity.FATAL, modelSource.getLocation(), e ) );
-            throw new ModelBuildingException( problems.getProblems() );
+            throw new ModelBuildingException( problems.getRootModelId(), problems.getProblems() );
         }
 
         model.setPomFile( pomFile );
@@ -517,11 +521,9 @@
         }
         catch ( UnresolvableModelException e )
         {
-            problems.add( new ModelProblem( "Non-resolvable parent POM "
-                + ModelProblemUtils.toId( groupId, artifactId, version ) + ": " + e.getMessage(),
-                                            ModelProblem.Severity.FATAL, ModelProblemUtils.toSourceHint( childModel ),
-                                            e ) );
-            throw new ModelBuildingException( problems.getProblems() );
+            problems.addFatalError( "Non-resolvable parent POM "
+                + ModelProblemUtils.toId( groupId, artifactId, version ) + ": " + e.getMessage(), e );
+            throw new ModelBuildingException( problems.getRootModelId(), problems.getProblems() );
         }
 
         Model parentModel = readModel( modelSource, null, request, problems );

Modified: maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelProblemCollector.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelProblemCollector.java?rev=801449&r1=801448&r2=801449&view=diff
==============================================================================
--- maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelProblemCollector.java (original)
+++ maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelProblemCollector.java Wed Aug  5 22:45:14 2009
@@ -43,6 +43,8 @@
 
     private Model sourceModel;
 
+    private Model rootModel;
+
     public DefaultModelProblemCollector( List<ModelProblem> problems )
     {
         this.problems = ( problems != null ) ? problems : new ArrayList<ModelProblem>();
@@ -74,11 +76,36 @@
         return sourceHint;
     }
 
+    public void setRootModel( Model rootModel )
+    {
+        this.rootModel = rootModel;
+    }
+
+    public Model getRootModel()
+    {
+        return rootModel;
+    }
+
+    public String getRootModelId()
+    {
+        return ModelProblemUtils.toId( rootModel );
+    }
+
     public void add( ModelProblem problem )
     {
         problems.add( problem );
     }
 
+    public void addFatalError( String message )
+    {
+        problems.add( new ModelProblem( message, ModelProblem.Severity.FATAL, getSourceHint() ) );
+    }
+
+    public void addFatalError( String message, Exception cause )
+    {
+        problems.add( new ModelProblem( message, ModelProblem.Severity.FATAL, getSourceHint(), cause ) );
+    }
+
     public void addError( String message )
     {
         problems.add( new ModelProblem( message, ModelProblem.Severity.ERROR, getSourceHint() ) );

Modified: maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelBuildingException.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelBuildingException.java?rev=801449&r1=801448&r2=801449&view=diff
==============================================================================
--- maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelBuildingException.java (original)
+++ maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelBuildingException.java Wed Aug  5 22:45:14 2009
@@ -35,16 +35,21 @@
     extends Exception
 {
 
+    private final String modelId;
+
     private final List<ModelProblem> problems;
 
     /**
      * Creates a new exception with the specified problems.
      * 
+     * @param modelId The identifier of the model that could not be built, may be {@code null}.
      * @param problems The problems that causes this exception, may be {@code null}.
      */
-    public ModelBuildingException( List<ModelProblem> problems )
+    public ModelBuildingException( String modelId, List<ModelProblem> problems )
     {
-        super( toMessage( problems ) );
+        super( toMessage( modelId, problems ) );
+
+        this.modelId = ( modelId != null ) ? modelId : "";
 
         this.problems = new ArrayList<ModelProblem>();
         if ( problems != null )
@@ -54,16 +59,28 @@
     }
 
     /**
+     * Gets the identifier of the POM whose effective model could not be built. The general format of the identifier is
+     * {@code <groupId>:<artifactId>:<version>} but some of these coordinates may still be unknown at the point the
+     * exception is thrown so this information is merely meant to assist the user.
+     * 
+     * @return The identifier of the POM or an empty string if not known, never {@code null}.
+     */
+    public String getModelId()
+    {
+        return modelId;
+    }
+
+    /**
      * Gets the problems that caused this exception.
      * 
      * @return The problems that caused this exception, never {@code null}.
      */
     public List<ModelProblem> getProblems()
     {
-        return this.problems;
+        return problems;
     }
 
-    private static String toMessage( List<ModelProblem> problems )
+    private static String toMessage( String modelId, List<ModelProblem> problems )
     {
         StringWriter buffer = new StringWriter( 1024 );
 
@@ -71,7 +88,13 @@
 
         writer.print( problems.size() );
         writer.print( ( problems.size() == 1 ) ? " problem was " : " problems were " );
-        writer.println( "encountered during construction of the effective model:" );
+        writer.print( "encountered while building the effective model" );
+        if ( modelId != null && modelId.length() > 0 )
+        {
+            writer.print( " for " );
+            writer.print( modelId );
+        }
+        writer.println();
 
         for ( ModelProblem problem : problems )
         {

Modified: maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelProblemUtils.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelProblemUtils.java?rev=801449&r1=801448&r2=801449&view=diff
==============================================================================
--- maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelProblemUtils.java (original)
+++ maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelProblemUtils.java Wed Aug  5 22:45:14 2009
@@ -34,11 +34,16 @@
     /**
      * Creates a user-friendly source hint for the specified model.
      * 
-     * @param model The model to create a source hint for, must not be {@code null}.
+     * @param model The model to create a source hint for, may be {@code null}.
      * @return The user-friendly source hint, never {@code null}.
      */
     public static String toSourceHint( Model model )
     {
+        if ( model == null )
+        {
+            return "";
+        }
+
         StringBuilder buffer = new StringBuilder( 192 );
 
         buffer.append( toId( model ) );
@@ -52,8 +57,13 @@
         return buffer.toString();
     }
 
-    private static String toId( Model model )
+    public static String toId( Model model )
     {
+        if ( model == null )
+        {
+            return "";
+        }
+
         String groupId = model.getGroupId();
         if ( groupId == null && model.getParent() != null )
         {