You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by hb...@apache.org on 2018/12/27 00:29:24 UTC
[maven] 04/04: [MNG-6533] ProjectBuilder report ModelProblem
instead of Exception
This is an automated email from the ASF dual-hosted git repository.
hboutemy pushed a commit to branch MNG-6533-2
in repository https://gitbox.apache.org/repos/asf/maven.git
commit efd8164bf2d1b05a989e9e00ca3b86dc76394326
Author: Mickael Istria <mi...@redhat.com>
AuthorDate: Fri Nov 30 11:28:03 2018 +0100
[MNG-6533] ProjectBuilder report ModelProblem instead of Exception
Sending ModelProblems allows to keep processing other pom files.
---
.../maven/project/DefaultProjectBuilder.java | 22 +++++++++++++++---
.../apache/maven/project/ProjectBuilderTest.java | 26 ++++++++++++++++++++++
maven-core/src/test/resources/projects/badPom.xml | 8 +++++++
3 files changed, 53 insertions(+), 3 deletions(-)
diff --git a/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java b/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java
index 5e8626a..8710f8b 100644
--- a/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java
+++ b/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java
@@ -448,8 +448,16 @@ public class DefaultProjectBuilder
}
Model model = result.getEffectiveModel();
- // first pass: build without building parent.
- initProject( project, projectIndex, false, result, new HashMap<File, Boolean>( 0 ), config.request );
+ try
+ {
+ // first pass: build without building parent.
+ initProject( project, projectIndex, false, result, new HashMap<File, Boolean>( 0 ), config.request );
+ }
+ catch ( Exception e )
+ {
+ result.getProblems().add( new DefaultModelProblem( null, ModelProblem.Severity.ERROR, null, model, -1, -1,
+ e ) );
+ }
projectIndex.put( result.getModelIds().get( 0 ), project );
@@ -596,7 +604,15 @@ public class DefaultProjectBuilder
ModelBuildingResult result = modelBuilder.build( interimResult.request, interimResult.result );
// 2nd pass of initialization: resolve and build parent if necessary
- initProject( project, projectIndex, true, result, profilesXmls, request );
+ try
+ {
+ initProject( project, projectIndex, true, result, profilesXmls, request );
+ }
+ catch ( Exception e )
+ {
+ result.getProblems().add( new DefaultModelProblem( null, ModelProblem.Severity.ERROR, null,
+ result.getEffectiveModel(), -1, -1, e ) );
+ }
List<MavenProject> modules = new ArrayList<>();
noErrors =
diff --git a/maven-core/src/test/java/org/apache/maven/project/ProjectBuilderTest.java b/maven-core/src/test/java/org/apache/maven/project/ProjectBuilderTest.java
index d954fb3..e52c9ce 100644
--- a/maven-core/src/test/java/org/apache/maven/project/ProjectBuilderTest.java
+++ b/maven-core/src/test/java/org/apache/maven/project/ProjectBuilderTest.java
@@ -166,4 +166,30 @@ public class ProjectBuilderTest
assertEquals( pomFile, project.getFile() );
}
}
+
+ public void testReadInvalidPom()
+ throws Exception
+ {
+ File pomFile = new File( "src/test/resources/projects/badPom.xml" ).getAbsoluteFile();
+ MavenSession mavenSession = createMavenSession( null );
+ ProjectBuildingRequest configuration = new DefaultProjectBuildingRequest();
+ configuration.setValidationLevel( ModelBuildingRequest.VALIDATION_LEVEL_MINIMAL );
+ configuration.setRepositorySession( mavenSession.getRepositorySession() );
+ org.apache.maven.project.ProjectBuilder projectBuilder =
+ lookup( org.apache.maven.project.ProjectBuilder.class );
+
+ // multi projects build entry point
+ try
+ {
+ projectBuilder.build( Collections.singletonList( pomFile ), false, configuration );
+ }
+ catch ( ProjectBuildingException ex )
+ {
+ assertEquals( 1, ex.getResults().size() );
+ MavenProject project = ex.getResults().get( 0 ).getProject();
+ assertNotNull( project );
+ assertNotSame( 0, ex.getResults().get( 0 ).getProblems().size() );
+ }
+ }
+
}
diff --git a/maven-core/src/test/resources/projects/badPom.xml b/maven-core/src/test/resources/projects/badPom.xml
new file mode 100644
index 0000000..219ae94
--- /dev/null
+++ b/maven-core/src/test/resources/projects/badPom.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ some garbage maven project builder can't parse
+
+</project>