]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-2896 Fix ability to configure Maven plugins under Maven 2.x
authorEvgeny Mandrikov <mandrikov@gmail.com>
Wed, 12 Oct 2011 09:50:41 +0000 (13:50 +0400)
committerEvgeny Mandrikov <mandrikov@gmail.com>
Wed, 12 Oct 2011 13:11:34 +0000 (17:11 +0400)
sonar-batch/src/main/java/org/sonar/batch/MavenProjectConverter.java
sonar-plugin-api/src/main/java/org/sonar/api/batch/bootstrap/ProjectDefinition.java

index e4381e89b95a4e78b78303dc7217b53af00d2ba0..c9c56384afe53442bcf46674a016a4e71fdf30f8 100644 (file)
@@ -84,8 +84,11 @@ public final class MavenProjectConverter {
    */
   static ProjectDefinition convert(MavenProject pom) {
     String key = new StringBuilder().append(pom.getGroupId()).append(":").append(pom.getArtifactId()).toString();
-    ProjectDefinition definition = ProjectDefinition.create(pom.getModel().getProperties());
-    definition.setKey(key)
+    ProjectDefinition definition = ProjectDefinition.create();
+    // IMPORTANT NOTE : reference on properties from POM model must not be saved, instead they should be copied explicitly - see SONAR-2896
+    definition
+        .setProperties(pom.getModel().getProperties())
+        .setKey(key)
         .setVersion(pom.getVersion())
         .setName(pom.getName())
         .setDescription(pom.getDescription())
index bc0e9163fcf58ecc1af61d15101fe5730792b192..4a5264a33e15e5d26bad7c88e9d3efd07dfb0f88 100644 (file)
@@ -58,6 +58,13 @@ public final class ProjectDefinition implements BatchComponent {
     this.properties = p;
   }
 
+  /**
+   * @deprecated in 2.12, because it uses external object to represent internal state.
+   * To ensure backward-compatibility with Ant task this method cannot clone properties,
+   * so other callers must explicitly make clone of properties before passing into this method.
+   * Thus better to use {@link #create()} with combination of other methods like {@link #setProperties(Properties)} and {@link #setProperty(String, String)}.
+   */
+  @Deprecated
   public static ProjectDefinition create(Properties properties) {
     return new ProjectDefinition(properties);
   }
@@ -74,6 +81,7 @@ public final class ProjectDefinition implements BatchComponent {
   public File getBaseDir() {
     return baseDir;
   }
+
   public ProjectDefinition setWorkDir(File workDir) {
     this.workDir = workDir;
     return this;
@@ -87,6 +95,16 @@ public final class ProjectDefinition implements BatchComponent {
     return properties;
   }
 
+  /**
+   * Copies specified properties into this object.
+   * 
+   * @since 2.12
+   */
+  public ProjectDefinition setProperties(Properties properties) {
+    properties.putAll(properties);
+    return this;
+  }
+
   public ProjectDefinition setProperty(String key, String value) {
     properties.setProperty(key, value);
     return this;
@@ -204,7 +222,6 @@ public final class ProjectDefinition implements BatchComponent {
     return Arrays.asList(StringUtils.split(sources, SEPARATOR));
   }
 
-
   public List<String> getTestDirs() {
     String sources = properties.getProperty(TEST_DIRS_PROPERTY, "");
     return Arrays.asList(StringUtils.split(sources, SEPARATOR));
@@ -246,7 +263,6 @@ public final class ProjectDefinition implements BatchComponent {
     return this;
   }
 
-
   /**
    * Adding source files is possible only if no source directories have been set.
    * Absolute path or relative path from project base dir.
@@ -273,7 +289,6 @@ public final class ProjectDefinition implements BatchComponent {
     return Arrays.asList(StringUtils.split(sources, SEPARATOR));
   }
 
-
   public List<String> getBinaries() {
     String sources = properties.getProperty(BINARIES_PROPERTY, "");
     return Arrays.asList(StringUtils.split(sources, SEPARATOR));
@@ -293,7 +308,6 @@ public final class ProjectDefinition implements BatchComponent {
     return addBinaryDir(f.getAbsolutePath());
   }
 
-
   public List<String> getLibraries() {
     String sources = properties.getProperty(LIBRARIES_PROPERTY, "");
     return Arrays.asList(StringUtils.split(sources, SEPARATOR));