private static final List<String> NON_HERITED_PROPERTIES_FOR_CHILD = Lists.newArrayList(PROPERTY_PROJECT_BASEDIR, PROPERTY_MODULES, PROPERTY_PROJECT_DESCRIPTION);
private Properties properties;
+ private File rootProjectWorkDir;
private SonarProjectBuilder(Properties properties) {
this.properties = properties;
}
public ProjectDefinition generateProjectDefinition() {
- ProjectDefinition rootProject = defineProject(properties);
+ ProjectDefinition rootProject = defineProject(properties, null);
+ rootProjectWorkDir = rootProject.getWorkDir();
defineChildren(rootProject);
cleanAndCheckProjectDefinitions(rootProject);
return rootProject;
}
- private ProjectDefinition defineProject(Properties properties) {
+ private ProjectDefinition defineProject(Properties properties, ProjectDefinition parent) {
checkMandatoryProperties(properties, MANDATORY_PROPERTIES_FOR_PROJECT);
File baseDir = new File(properties.getProperty(PROPERTY_PROJECT_BASEDIR));
+ File workDir = null;
+ if (parent == null) {
+ workDir = initRootProjectWorkDir(baseDir);
+ } else {
+ workDir = initModuleWorkDir(properties);
+ }
+
ProjectDefinition definition = ProjectDefinition.create((Properties) properties.clone())
.setBaseDir(baseDir)
- .setWorkDir(initWorkDir(baseDir));
+ .setWorkDir(workDir);
return definition;
}
@VisibleForTesting
- protected File initWorkDir(File baseDir) {
+ protected File initRootProjectWorkDir(File baseDir) {
String workDir = properties.getProperty(PROPERTY_WORK_DIRECTORY);
if (StringUtils.isBlank(workDir)) {
return new File(baseDir, DEF_VALUE_WORK_DIRECTORY);
return new File(baseDir, customWorkDir.getPath());
}
+ @VisibleForTesting
+ protected File initModuleWorkDir(Properties properties) {
+ return new File(rootProjectWorkDir, properties.getProperty(PROPERTY_PROJECT_KEY));
+ }
+
private void defineChildren(ProjectDefinition parentProject) {
Properties parentProps = parentProject.getProperties();
if (parentProps.containsKey(PROPERTY_MODULES)) {
prefixProjectKeyWithParentKey(moduleProps, parentProject.getKey());
- return defineProject(moduleProps);
+ return defineProject(moduleProps, parentProject);
}
protected void loadPropsFile(ProjectDefinition parentProject, Properties moduleProps, String moduleId) {
// and module properties must have been cleaned
assertThat(rootProject.getProperties().getProperty("module1.sonar.projectKey")).isNull();
assertThat(rootProject.getProperties().getProperty("module2.sonar.projectKey")).isNull();
+ // Check baseDir and workDir
+ assertThat(rootProject.getBaseDir().getCanonicalFile())
+ .isEqualTo(TestUtils.getResource(this.getClass(), "multi-module-definitions-all-in-root"));
+ assertThat(rootProject.getWorkDir().getCanonicalFile())
+ .isEqualTo(new File(TestUtils.getResource(this.getClass(), "multi-module-definitions-all-in-root"), ".sonar"));
// CHECK MODULES
List<ProjectDefinition> modules = rootProject.getSubProjects();
assertThat(module1.getTestDirs()).contains("tests");
assertThat(module1.getBinaries()).contains("target/classes");
// and module properties must have been cleaned
- assertThat(rootProject.getProperties().getProperty("module1.sonar.projectKey")).isNull();
- assertThat(rootProject.getProperties().getProperty("module2.sonar.projectKey")).isNull();
+ assertThat(module1.getProperties().getProperty("module1.sonar.projectKey")).isNull();
+ assertThat(module1.getProperties().getProperty("module2.sonar.projectKey")).isNull();
+ // Check baseDir and workDir
+ assertThat(module1.getBaseDir().getCanonicalFile())
+ .isEqualTo(TestUtils.getResource(this.getClass(), "multi-module-definitions-all-in-root/module1"));
+ assertThat(module1.getWorkDir().getCanonicalFile())
+ .isEqualTo(new File(TestUtils.getResource(this.getClass(), "multi-module-definitions-all-in-root"), ".sonar/com.foo.project:module1"));
// Module 2
ProjectDefinition module2 = modules.get(1);
assertThat(module2.getTestDirs()).contains("tests");
assertThat(module2.getBinaries()).contains("target/classes");
// and module properties must have been cleaned
- assertThat(rootProject.getProperties().getProperty("module1.sonar.projectKey")).isNull();
- assertThat(rootProject.getProperties().getProperty("module2.sonar.projectKey")).isNull();
+ assertThat(module2.getProperties().getProperty("module1.sonar.projectKey")).isNull();
+ assertThat(module2.getProperties().getProperty("module2.sonar.projectKey")).isNull();
+ // Check baseDir and workDir
+ assertThat(module2.getBaseDir().getCanonicalFile())
+ .isEqualTo(TestUtils.getResource(this.getClass(), "multi-module-definitions-all-in-root/module2"));
+ assertThat(module2.getWorkDir().getCanonicalFile())
+ .isEqualTo(new File(TestUtils.getResource(this.getClass(), "multi-module-definitions-all-in-root"), ".sonar/com.foo.project:com.foo.project.module2"));
}
@Test
assertThat(module1.getTestDirs()).contains("tests");
assertThat(module1.getBinaries()).contains("target/classes");
// and module properties must have been cleaned
- assertThat(rootProject.getProperties().getProperty("module1.sonar.projectKey")).isNull();
- assertThat(rootProject.getProperties().getProperty("module2.sonar.projectKey")).isNull();
+ assertThat(module1.getProperties().getProperty("module1.sonar.projectKey")).isNull();
+ assertThat(module1.getProperties().getProperty("module2.sonar.projectKey")).isNull();
// Module 2
ProjectDefinition module2 = modules.get(1);
assertThat(module2.getTestDirs()).contains("tests");
assertThat(module2.getBinaries()).contains("target/classes");
// and module properties must have been cleaned
- assertThat(rootProject.getProperties().getProperty("module1.sonar.projectKey")).isNull();
- assertThat(rootProject.getProperties().getProperty("module2.sonar.projectKey")).isNull();
+ assertThat(module2.getProperties().getProperty("module1.sonar.projectKey")).isNull();
+ assertThat(module2.getProperties().getProperty("module2.sonar.projectKey")).isNull();
}
@Test
}
@Test
- public void shouldInitWorkDir() {
+ public void shouldInitRootWorkDir() {
SonarProjectBuilder builder = SonarProjectBuilder.create(new Properties());
File baseDir = new File("target/tmp/baseDir");
- File workDir = builder.initWorkDir(baseDir);
+ File workDir = builder.initRootProjectWorkDir(baseDir);
assertThat(workDir).isEqualTo(new File(baseDir, ".sonar"));
}
SonarProjectBuilder builder = SonarProjectBuilder.create(properties);
File baseDir = new File("target/tmp/baseDir");
- File workDir = builder.initWorkDir(baseDir);
+ File workDir = builder.initRootProjectWorkDir(baseDir);
assertThat(workDir).isEqualTo(new File(baseDir, ".foo"));
}
@Test
- public void shouldInitWorkDirWithCustomAbsoluteFolder() {
+ public void shouldInitRootWorkDirWithCustomAbsoluteFolder() {
Properties properties = new Properties();
properties.put("sonar.working.directory", new File("src").getAbsolutePath());
SonarProjectBuilder builder = SonarProjectBuilder.create(properties);
File baseDir = new File("target/tmp/baseDir");
- File workDir = builder.initWorkDir(baseDir);
+ File workDir = builder.initRootProjectWorkDir(baseDir);
assertThat(workDir).isEqualTo(new File("src").getAbsoluteFile());
}