]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-2681 Provide meaningful error message when unable to determine Maven project...
authorEvgeny Mandrikov <mandrikov@gmail.com>
Thu, 13 Oct 2011 11:33:22 +0000 (15:33 +0400)
committerEvgeny Mandrikov <mandrikov@gmail.com>
Thu, 13 Oct 2011 11:37:38 +0000 (15:37 +0400)
This occurs because of usage of Advanced Reactor Options.

sonar-batch/src/main/java/org/sonar/batch/MavenProjectConverter.java
sonar-batch/src/test/java/org/sonar/batch/MavenProjectConverterTest.java

index c9c56384afe53442bcf46674a016a4e71fdf30f8..bd5dceb64444676d8b86a0b3d711d16ac6c23ca8 100644 (file)
@@ -32,9 +32,8 @@ import com.google.common.collect.Maps;
 
 public final class MavenProjectConverter {
 
-  private MavenProjectConverter() {
-    // only static methods
-  }
+  private static final String UNABLE_TO_DETERMINE_PROJECT_STRUCTURE_EXCEPTION_MESSAGE = "Unable to determine structure of project." +
+      " Probably you use Maven Advanced Reactor Options, which is not supported by Sonar and should not be used.";
 
   public static ProjectDefinition convert(List<MavenProject> poms, MavenProject root) {
     Map<String, MavenProject> paths = Maps.newHashMap(); // projects by canonical path to pom.xml
@@ -59,10 +58,10 @@ public final class MavenProjectConverter {
           ProjectDefinition parentProject = defs.get(pom);
           ProjectDefinition subProject = defs.get(module);
           if (parentProject == null) {
-            throw new IllegalStateException();
+            throw new IllegalStateException(UNABLE_TO_DETERMINE_PROJECT_STRUCTURE_EXCEPTION_MESSAGE);
           }
           if (subProject == null) {
-            throw new IllegalStateException();
+            throw new IllegalStateException(UNABLE_TO_DETERMINE_PROJECT_STRUCTURE_EXCEPTION_MESSAGE);
           }
           parentProject.addSubProject(subProject);
         }
@@ -73,7 +72,7 @@ public final class MavenProjectConverter {
 
     ProjectDefinition rootProject = defs.get(root);
     if (rootProject == null) {
-      throw new IllegalStateException();
+      throw new IllegalStateException(UNABLE_TO_DETERMINE_PROJECT_STRUCTURE_EXCEPTION_MESSAGE);
     }
 
     return rootProject;
@@ -115,4 +114,8 @@ public final class MavenProjectConverter {
     }
     return file;
   }
+
+  private MavenProjectConverter() {
+    // only static methods
+  }
 }
index 872de93fed8901ebbf7151af865bb76115185220..e220ecf12d73f20aadde7d47caf05a0e96a86aa0 100644 (file)
  */
 package org.sonar.batch;
 
+import static org.hamcrest.Matchers.containsString;
+import static org.hamcrest.Matchers.is;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertThat;
+import static org.junit.Assert.fail;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.StringReader;
+import java.net.URISyntaxException;
+import java.util.Arrays;
+import java.util.Properties;
+
 import org.apache.commons.io.FileUtils;
 import org.apache.maven.model.Model;
 import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
@@ -29,18 +42,25 @@ import org.junit.Test;
 import org.sonar.api.CoreProperties;
 import org.sonar.api.batch.bootstrap.ProjectDefinition;
 
-import java.io.File;
-import java.io.IOException;
-import java.io.StringReader;
-import java.net.URISyntaxException;
-import java.util.Arrays;
-import java.util.Properties;
+public class MavenProjectConverterTest {
 
-import static org.hamcrest.Matchers.is;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertThat;
+  /**
+   * See SONAR-2681
+   */
+  public void shouldThrowExceptionWhenUnableToDetermineProjectStructure() {
+    MavenProject root = new MavenProject();
+    root.setFile(new File("/foo/pom.xml"));
+    root.getBuild().setDirectory("target");
+    root.getModules().add("module/pom.xml");
+
+    try {
+      MavenProjectConverter.convert(Arrays.asList(root), root);
+      fail();
+    } catch (IllegalStateException e) {
+      assertThat(e.getMessage(), containsString("Advanced Reactor Options"));
+    }
+  }
 
-public class MavenProjectConverterTest {
   @Test
   public void shouldConvertModules() {
     MavenProject root = new MavenProject();