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<MavenProject> poms, MavenProject root) {
Map<String, MavenProject> paths = Maps.newHashMap(); // projects by canonical path to pom.xml
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);
}
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()) {
+ 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();
}
return file;
}
-
- private MavenProjectConverter() {
- // only static methods
- }
}
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/");
--- /dev/null
+<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
--- /dev/null
+<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>
+ <groupId>org.test</groupId>
+ <artifactId>parent</artifactId>
+ <version>0.1-SNAPSHOT</version>
+ <packaging>pom</packaging>
+ <modules>
+ <module>module</module>
+ </modules>
+</project>
\ No newline at end of file
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()