From: Julien Lancelot Date: Mon, 11 Feb 2013 14:10:55 +0000 (+0100) Subject: SONAR-3843 Unable to determine structure of Maven project X-Git-Tag: 3.5~216 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=4cf1785b3790ca8c31973cea68662a0192b5230a;p=sonarqube.git SONAR-3843 Unable to determine structure of Maven project --- diff --git a/sonar-batch/src/main/java/org/sonar/batch/MavenProjectConverter.java b/sonar-batch/src/main/java/org/sonar/batch/MavenProjectConverter.java index 5f203f3eae7..024c357ecbc 100644 --- a/sonar-batch/src/main/java/org/sonar/batch/MavenProjectConverter.java +++ b/sonar-batch/src/main/java/org/sonar/batch/MavenProjectConverter.java @@ -38,7 +38,11 @@ import java.util.Map; public final class MavenProjectConverter { 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."; + " Probably you use Maven Advanced Reactor Options, which is not supported by Sonar and should not be used."; + + private MavenProjectConverter() { + // only static methods + } public static ProjectDefinition convert(List poms, MavenProject root) { Map paths = Maps.newHashMap(); // projects by canonical path to pom.xml @@ -55,16 +59,13 @@ public final class MavenProjectConverter { for (Object m : pom.getModules()) { String moduleId = (String) m; File modulePath = new File(pom.getBasedir(), moduleId); - if (modulePath.exists() && modulePath.isDirectory()) { - modulePath = new File(modulePath, "pom.xml"); - } - MavenProject module = paths.get(modulePath.getCanonicalPath()); + MavenProject module = findMavenProject(modulePath, paths); ProjectDefinition parentProject = defs.get(pom); - ProjectDefinition subProject = defs.get(module); if (parentProject == null) { throw new IllegalStateException(UNABLE_TO_DETERMINE_PROJECT_STRUCTURE_EXCEPTION_MESSAGE); } + ProjectDefinition subProject = defs.get(module); if (subProject == null) { throw new IllegalStateException(UNABLE_TO_DETERMINE_PROJECT_STRUCTURE_EXCEPTION_MESSAGE); } @@ -83,6 +84,19 @@ public final class MavenProjectConverter { return rootProject; } + private static MavenProject findMavenProject(final File modulePath, Map paths) throws IOException { + if (modulePath.exists() && modulePath.isDirectory()) { + for (Map.Entry entry : paths.entrySet()) { + if (entry.getKey().contains(modulePath.getCanonicalPath())) { + return entry.getValue(); + } + } + return null; + } else { + return paths.get(modulePath.getCanonicalPath()); + } + } + @VisibleForTesting static ProjectDefinition convert(MavenProject pom) { String key = new StringBuilder().append(pom.getGroupId()).append(":").append(pom.getArtifactId()).toString(); @@ -153,8 +167,4 @@ public final class MavenProjectConverter { } return file; } - - private MavenProjectConverter() { - // only static methods - } } diff --git a/sonar-batch/src/test/java/org/sonar/batch/MavenProjectConverterTest.java b/sonar-batch/src/test/java/org/sonar/batch/MavenProjectConverterTest.java index 91c77da73fa..325fbdd4a53 100644 --- a/sonar-batch/src/test/java/org/sonar/batch/MavenProjectConverterTest.java +++ b/sonar-batch/src/test/java/org/sonar/batch/MavenProjectConverterTest.java @@ -138,6 +138,26 @@ public class MavenProjectConverterTest { assertThat(module1Def.getSubProjects().size(), Is.is(0)); } + @Test + public void should_find_module_with_maven_project_file_naming_different_from_pom_xml() throws Exception { + File rootDir = TestUtils.getResource("/org/sonar/batch/MavenProjectConverterTest/mavenProjectFileNameNotEqualsToPomXml/"); + MavenProject parent = loadPom("/org/sonar/batch/MavenProjectConverterTest/mavenProjectFileNameNotEqualsToPomXml/pom.xml", true); + MavenProject module = loadPom("/org/sonar/batch/MavenProjectConverterTest/mavenProjectFileNameNotEqualsToPomXml/module/pom_having_different_name.xml", false); + + ProjectDefinition rootDef = MavenProjectConverter.convert(Arrays.asList(parent, module), parent); + + assertThat(rootDef.getSubProjects().size(), Is.is(1)); + assertThat(rootDef.getKey(), Is.is("org.test:parent")); + assertNull(rootDef.getParent()); + assertThat(rootDef.getBaseDir(), is(rootDir)); + + ProjectDefinition module1Def = rootDef.getSubProjects().get(0); + assertThat(module1Def.getKey(), Is.is("org.test:module")); + assertThat(module1Def.getParent(), Is.is(rootDef)); + assertThat(module1Def.getBaseDir(), Is.is(new File(rootDir, "module"))); + assertThat(module1Def.getSubProjects().size(), Is.is(0)); + } + @Test public void testSingleProjectWithoutModules() throws Exception { File rootDir = TestUtils.getResource("/org/sonar/batch/MavenProjectConverterTest/singleProjectWithoutModules/"); diff --git a/sonar-batch/src/test/resources/org/sonar/batch/MavenProjectConverterTest/mavenProjectFileNameNotEqualsToPomXml/module/pom_having_different_name.xml b/sonar-batch/src/test/resources/org/sonar/batch/MavenProjectConverterTest/mavenProjectFileNameNotEqualsToPomXml/module/pom_having_different_name.xml new file mode 100644 index 00000000000..7b49562c2e0 --- /dev/null +++ b/sonar-batch/src/test/resources/org/sonar/batch/MavenProjectConverterTest/mavenProjectFileNameNotEqualsToPomXml/module/pom_having_different_name.xml @@ -0,0 +1,11 @@ + + 4.0.0 + + org.test + parent + 0.1-SNAPSHOT + + module + jar + \ No newline at end of file diff --git a/sonar-batch/src/test/resources/org/sonar/batch/MavenProjectConverterTest/mavenProjectFileNameNotEqualsToPomXml/pom.xml b/sonar-batch/src/test/resources/org/sonar/batch/MavenProjectConverterTest/mavenProjectFileNameNotEqualsToPomXml/pom.xml new file mode 100644 index 00000000000..9d2244eb148 --- /dev/null +++ b/sonar-batch/src/test/resources/org/sonar/batch/MavenProjectConverterTest/mavenProjectFileNameNotEqualsToPomXml/pom.xml @@ -0,0 +1,11 @@ + + 4.0.0 + org.test + parent + 0.1-SNAPSHOT + pom + + module + + \ No newline at end of file diff --git a/sonar-maven3-plugin/src/main/java/org/sonar/maven3/SonarMojo.java b/sonar-maven3-plugin/src/main/java/org/sonar/maven3/SonarMojo.java index 15e9aa6f08f..55a43090520 100644 --- a/sonar-maven3-plugin/src/main/java/org/sonar/maven3/SonarMojo.java +++ b/sonar-maven3-plugin/src/main/java/org/sonar/maven3/SonarMojo.java @@ -127,7 +127,7 @@ public final class SonarMojo extends AbstractMojo { private RuntimeInformation runtimeInformation; public void execute() throws MojoExecutionException, MojoFailureException { - ProjectDefinition def = MavenProjectConverter.convert(session.getSortedProjects(), project); + ProjectDefinition def = MavenProjectConverter.convert(session.getProjects(), project); ProjectReactor reactor = new ProjectReactor(def); Batch batch = Batch.builder()