diff options
3 files changed, 31 insertions, 11 deletions
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 2cf8b56a227..9e214b56117 100644 --- a/sonar-batch/src/main/java/org/sonar/batch/MavenProjectConverter.java +++ b/sonar-batch/src/main/java/org/sonar/batch/MavenProjectConverter.java @@ -40,6 +40,10 @@ 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."; + private MavenProjectConverter() { + // only static methods + } + public static ProjectDefinition convert(List<MavenProject> poms, MavenProject root) { Map<String, MavenProject> paths = Maps.newHashMap(); // projects by canonical path to pom.xml Map<MavenProject, ProjectDefinition> defs = Maps.newHashMap(); @@ -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,20 @@ public final class MavenProjectConverter { return rootProject; } + private static MavenProject findMavenProject(final File modulePath, Map<String, MavenProject> paths) throws IOException { + if (modulePath.exists() && modulePath.isDirectory()) { + for (Map.Entry<String, MavenProject> entry : paths.entrySet()) { + String pomFileParentDir = new File(entry.getKey()).getParent(); + if (pomFileParentDir.equals(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 +168,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 27857fc8c14..325fbdd4a53 100644 --- a/sonar-batch/src/test/java/org/sonar/batch/MavenProjectConverterTest.java +++ b/sonar-batch/src/test/java/org/sonar/batch/MavenProjectConverterTest.java @@ -25,7 +25,6 @@ import org.apache.maven.model.io.xpp3.MavenXpp3Reader; import org.apache.maven.project.MavenProject; import org.codehaus.plexus.util.xml.pull.XmlPullParserException; import org.hamcrest.core.Is; -import org.junit.Ignore; import org.junit.Test; import org.sonar.api.CoreProperties; import org.sonar.api.batch.bootstrap.ProjectDefinition; @@ -140,7 +139,6 @@ public class MavenProjectConverterTest { } @Test - @Ignore 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); diff --git a/sonar-batch/src/test/resources/org/sonar/batch/MavenProjectConverterTest/mavenProjectFileNameNotEqualsToPomXml/module/pom.xml b/sonar-batch/src/test/resources/org/sonar/batch/MavenProjectConverterTest/mavenProjectFileNameNotEqualsToPomXml/module/pom.xml new file mode 100644 index 00000000000..7b49562c2e0 --- /dev/null +++ b/sonar-batch/src/test/resources/org/sonar/batch/MavenProjectConverterTest/mavenProjectFileNameNotEqualsToPomXml/module/pom.xml @@ -0,0 +1,11 @@ +<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> + <parent> + <groupId>org.test</groupId> + <artifactId>parent</artifactId> + <version>0.1-SNAPSHOT</version> + </parent> + <artifactId>module</artifactId> + <packaging>jar</packaging> +</project>
\ No newline at end of file |