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/07/01 12:45:29 UTC
svn commit: r790109 - in
/maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model:
DefaultModelBuilder.java DefaultModelBuildingResult.java
ModelBuildingResult.java ModelProblem.java
Author: bentmann
Date: Wed Jul 1 10:45:29 2009
New Revision: 790109
URL: http://svn.apache.org/viewvc?rev=790109&view=rev
Log:
o Distinguished different severity levels of model problems, allowing warnings to be collected but still have the build request succeed
Modified:
maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/DefaultModelBuilder.java
maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/DefaultModelBuildingResult.java
maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/ModelBuildingResult.java
maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/ModelProblem.java
Modified: maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/DefaultModelBuilder.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/DefaultModelBuilder.java?rev=790109&r1=790108&r2=790109&view=diff
==============================================================================
--- maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/DefaultModelBuilder.java (original)
+++ maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/DefaultModelBuilder.java Wed Jul 1 10:45:29 2009
@@ -187,7 +187,7 @@
ModelValidationResult validationResult = modelValidator.validateEffectiveModel( resultModel, request );
addProblems( resultModel, validationResult, problems );
- if ( !problems.isEmpty() )
+ if ( hasErrors( problems ) )
{
throw new ModelBuildingException( problems );
}
@@ -196,6 +196,8 @@
resultData.setArtifactId( resultModel.getArtifactId() );
resultData.setVersion( resultModel.getVersion() );
+ result.setProblems( problems );
+
result.setEffectiveModel( resultModel );
result.setActiveExternalProfiles( activeExternalProfiles );
@@ -240,13 +242,13 @@
catch ( ModelParseException e )
{
problems.add( new ModelProblem( "Non-parseable POM " + modelSource.getLocation() + ": " + e.getMessage(),
- modelSource.getLocation(), e ) );
+ ModelProblem.Severity.FATAL, modelSource.getLocation(), e ) );
throw new ModelBuildingException( problems );
}
catch ( IOException e )
{
problems.add( new ModelProblem( "Non-readable POM " + modelSource.getLocation() + ": " + e.getMessage(),
- modelSource.getLocation(), e ) );
+ ModelProblem.Severity.FATAL, modelSource.getLocation(), e ) );
throw new ModelBuildingException( problems );
}
@@ -258,6 +260,22 @@
return model;
}
+ private boolean hasErrors( List<ModelProblem> problems )
+ {
+ if ( problems != null )
+ {
+ for ( ModelProblem problem : problems )
+ {
+ if ( ModelProblem.Severity.ERROR.compareTo( problem.getSeverity() ) >= 0 )
+ {
+ return true;
+ }
+ }
+ }
+
+ return false;
+ }
+
private void addProblems( Model model, ModelValidationResult result, List<ModelProblem> problems )
{
if ( result.getMessageCount() > 0 )
@@ -266,7 +284,8 @@
for ( int i = 0; i < result.getMessageCount(); i++ )
{
- problems.add( new ModelProblem( "Invalid POM " + source + ": " + result.getMessage( i ), source ) );
+ problems.add( new ModelProblem( "Invalid POM " + source + ": " + result.getMessage( i ),
+ ModelProblem.Severity.WARNING, source ) );
}
}
}
@@ -279,7 +298,7 @@
for ( ProfileActivationException e : result.getActivationExceptions() )
{
problems.add( new ModelProblem( "Invalid activation condition for external profile "
- + e.getProfile().getId() + ": " + e.getMessage(), "(external profiles)", e ) );
+ + e.getProfile().getId() + ": " + e.getMessage(), ModelProblem.Severity.ERROR, "(external profiles)", e ) );
}
return result.getActiveProfiles();
@@ -294,7 +313,7 @@
{
problems.add( new ModelProblem( "Invalid activation condition for project profile "
+ e.getProfile().getId() + " in POM " + toSourceHint( model ) + ": " + e.getMessage(),
- toSourceHint( model ), e ) );
+ ModelProblem.Severity.ERROR, toSourceHint( model ), e ) );
}
return result.getActiveProfiles();
@@ -319,7 +338,8 @@
catch ( InvalidRepositoryException e )
{
problems.add( new ModelProblem( "Invalid repository " + repository.getId() + " in POM "
- + toSourceHint( model ) + ": " + e.getMessage(), toSourceHint( model ), e ) );
+ + toSourceHint( model ) + ": " + e.getMessage(), ModelProblem.Severity.ERROR,
+ toSourceHint( model ), e ) );
}
}
}
@@ -345,7 +365,7 @@
catch ( ModelInterpolationException e )
{
problems.add( new ModelProblem( "Invalid expression in POM " + toSourceHint( model ) + ": "
- + e.getMessage(), toSourceHint( model ), e ) );
+ + e.getMessage(), ModelProblem.Severity.ERROR, toSourceHint( model ), e ) );
return model;
}
@@ -438,7 +458,8 @@
if ( modelResolver == null )
{
problems.add( new ModelProblem( "Non-resolvable parent POM " + toId( parent ) + " for POM "
- + toSourceHint( childModel ) + ": " + "No model resolver provided", toSourceHint( childModel ) ) );
+ + toSourceHint( childModel ) + ": " + "No model resolver provided", ModelProblem.Severity.FATAL,
+ toSourceHint( childModel ) ) );
throw new ModelBuildingException( problems );
}
@@ -450,7 +471,8 @@
catch ( UnresolvableModelException e )
{
problems.add( new ModelProblem( "Non-resolvable parent POM " + toId( parent ) + " for POM "
- + toSourceHint( childModel ) + ": " + e.getMessage(), toSourceHint( childModel ), e ) );
+ + toSourceHint( childModel ) + ": " + e.getMessage(), ModelProblem.Severity.FATAL,
+ toSourceHint( childModel ), e ) );
throw new ModelBuildingException( problems );
}
Modified: maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/DefaultModelBuildingResult.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/DefaultModelBuildingResult.java?rev=790109&r1=790108&r2=790109&view=diff
==============================================================================
--- maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/DefaultModelBuildingResult.java (original)
+++ maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/DefaultModelBuildingResult.java Wed Jul 1 10:45:29 2009
@@ -44,12 +44,15 @@
private List<Profile> activeExternalProfiles;
+ private List<ModelProblem> problems;
+
public DefaultModelBuildingResult()
{
modelIds = new ArrayList<String>();
rawModels = new HashMap<String, Model>();
activePomProfiles = new HashMap<String, List<Profile>>();
activeExternalProfiles = new ArrayList<Profile>();
+ problems = new ArrayList<ModelProblem>();
}
public Model getEffectiveModel()
@@ -147,4 +150,23 @@
return this;
}
+ public List<ModelProblem> getProblems()
+ {
+ return Collections.unmodifiableList( problems );
+ }
+
+ public DefaultModelBuildingResult setProblems( List<ModelProblem> problems )
+ {
+ if ( problems != null )
+ {
+ this.problems = new ArrayList<ModelProblem>( problems );
+ }
+ else
+ {
+ this.problems.clear();
+ }
+
+ return this;
+ }
+
}
Modified: maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/ModelBuildingResult.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/ModelBuildingResult.java?rev=790109&r1=790108&r2=790109&view=diff
==============================================================================
--- maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/ModelBuildingResult.java (original)
+++ maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/ModelBuildingResult.java Wed Jul 1 10:45:29 2009
@@ -84,4 +84,13 @@
*/
List<Profile> getActiveExternalProfiles();
+ /**
+ * Gets the problems that were encountered during the model building. Note that only problems of severity
+ * {@link ModelProblem.Severity#WARNING} and below are reported here. Problems with a higher severity level cause
+ * the model builder to fail with a {@link ModelBuildingException}.
+ *
+ * @return The problems that were encountered during the model building, can be empty but never {@code null}.
+ */
+ List<ModelProblem> getProblems();
+
}
Modified: maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/ModelProblem.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/ModelProblem.java?rev=790109&r1=790108&r2=790109&view=diff
==============================================================================
--- maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/ModelProblem.java (original)
+++ maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/ModelProblem.java Wed Jul 1 10:45:29 2009
@@ -21,29 +21,45 @@
/**
* Describes a problem that was encountered during model building. A problem can either be an exception that was thrown
- * or a simple string message. In addition, a problem carries a hint about its source, e.g. the POM file that could not
- * be processed.
+ * or a simple string message. In addition, a problem carries a hint about its source, e.g. the POM file that exhibits
+ * the problem.
*
* @author Benjamin Bentmann
*/
public class ModelProblem
{
+ /**
+ * The different severity levels for a problem, in decreasing order.
+ */
+ public enum Severity
+ {
+
+ FATAL, //
+ ERROR, //
+ WARNING, //
+
+ }
+
private String source;
private String message;
private Exception exception;
+ private Severity severity;
+
/**
* Creates a new problem with the specified message.
*
* @param message The message describing the problem, may be {@code null}.
+ * @param severity The severity level of the problem, may be {@code null} to default to {@link Severity#ERROR}.
* @param source A hint about the source of the problem, may be {@code null}.
*/
- public ModelProblem( String message, String source )
+ public ModelProblem( String message, Severity severity, String source )
{
this.message = message;
+ this.severity = ( severity != null ) ? severity : Severity.ERROR;
this.source = ( source != null ) ? source : "";
}
@@ -51,12 +67,14 @@
* Creates a new problem with the specified message and exception.
*
* @param message The message describing the problem, may be {@code null}.
+ * @param severity The severity level of the problem, may be {@code null} to default to {@link Severity#ERROR}.
* @param source A hint about the source of the problem, may be {@code null}.
* @param exception The exception that caused this problem, may be {@code null}.
*/
- public ModelProblem( String message, String source, Exception exception )
+ public ModelProblem( String message, Severity severity, String source, Exception exception )
{
this.message = message;
+ this.severity = ( severity != null ) ? severity : Severity.ERROR;
this.source = ( source != null ) ? source : "";
this.exception = exception;
}
@@ -109,10 +127,25 @@
return msg;
}
+ /**
+ * Gets the severity level of this problem.
+ *
+ * @return The severity level of this problem, never {@code null}.
+ */
+ public Severity getSeverity()
+ {
+ return severity;
+ }
+
@Override
public String toString()
{
- return getSource() + ": " + getMessage();
+ StringBuilder buffer = new StringBuilder( 128 );
+
+ buffer.append( "[" ).append( getSeverity() ).append( "] " );
+ buffer.append( getSource() ).append( ": " ).append( getMessage() );
+
+ return buffer.toString();
}
}