[MNG-6090] CI friendly properties break submodule builds
[MNG-6057] Problem with CI friendly usage of ${..} reactor order is changed
 o Based on the missing replacement of the versions ${revision}
   ${changelist} or ${sha1} within the parent element the order
   of the reactor changes.
[MNG-5895] Problem with CI friendly usage of ${..} which is already
defined via property in pom file.


Project: http://git-wip-us.apache.org/repos/asf/maven/repo
Commit: http://git-wip-us.apache.org/repos/asf/maven/commit/f48c9f98
Tree: http://git-wip-us.apache.org/repos/asf/maven/tree/f48c9f98
Diff: http://git-wip-us.apache.org/repos/asf/maven/diff/f48c9f98

Branch: refs/heads/MNG-6169
Commit: f48c9f98583ae9d1503f1f0ca8a796be9e2a4657
Parents: 430f70c
Author: Karl Heinz Marbaise <khmarba...@apache.org>
Authored: Tue Sep 29 11:46:48 2015 +0200
Committer: Michael Osipov <micha...@apache.org>
Committed: Sun Apr 2 00:21:12 2017 +0200

----------------------------------------------------------------------
 .../resolver/DefaultArtifactResolver.java       |  3 +-
 .../model/building/DefaultModelBuilder.java     | 35 ++++++++++++++++++--
 .../AbstractStringBasedModelInterpolator.java   | 20 +++++++++++
 .../model/validation/DefaultModelValidator.java |  7 ++--
 4 files changed, 59 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/maven/blob/f48c9f98/maven-compat/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactResolver.java
----------------------------------------------------------------------
diff --git 
a/maven-compat/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactResolver.java
 
b/maven-compat/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactResolver.java
index fc154cb..915ee72 100644
--- 
a/maven-compat/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactResolver.java
+++ 
b/maven-compat/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactResolver.java
@@ -376,7 +376,7 @@ public class DefaultArtifactResolver
         ArtifactFilter resolutionFilter = request.getResolutionFilter();
         RepositorySystemSession session = getSession( 
request.getLocalRepository() );
 
-        // TODO hack because metadata isn't generated in m2e correctly and i 
want to run the maven i have in the
+        // TODO: hack because metadata isn't generated in m2e correctly and i 
want to run the maven i have in the
         // workspace
         if ( source == null )
         {
@@ -506,6 +506,7 @@ public class DefaultArtifactResolver
         if ( result.hasMetadataResolutionExceptions() || 
result.hasVersionRangeViolations()
             || result.hasCircularDependencyExceptions() )
         {
+            logger.info( "Failure detected." );
             return result;
         }
 

http://git-wip-us.apache.org/repos/asf/maven/blob/f48c9f98/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilder.java
----------------------------------------------------------------------
diff --git 
a/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilder.java
 
b/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilder.java
index 4ebb033..463bf1c 100644
--- 
a/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilder.java
+++ 
b/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilder.java
@@ -62,6 +62,8 @@ import org.apache.maven.model.superpom.SuperPomProvider;
 import org.apache.maven.model.validation.ModelValidator;
 import org.codehaus.plexus.component.annotations.Component;
 import org.codehaus.plexus.component.annotations.Requirement;
+import org.codehaus.plexus.interpolation.MapBasedValueSource;
+import org.codehaus.plexus.interpolation.StringSearchInterpolator;
 
 import java.io.File;
 import java.io.IOException;
@@ -766,13 +768,40 @@ public class DefaultModelBuilder
         // save profile activations before interpolation, since they are 
evaluated with limited scope
         Map<String, Activation> originalActivations = getProfileActivations( 
model, true );
 
-        Model result = modelInterpolator.interpolateModel( model, 
model.getProjectDirectory(), request, problems );
-        result.setPomFile( model.getPomFile() );
+        Model interpolatedModel =
+            modelInterpolator.interpolateModel( model, 
model.getProjectDirectory(), request, problems );
+        if ( interpolatedModel.getParent() != null )
+        {
+            StringSearchInterpolator ssi = new StringSearchInterpolator();
+            ssi.addValueSource( new MapBasedValueSource( 
request.getUserProperties() ) );
+
+            ssi.addValueSource( new MapBasedValueSource( model.getProperties() 
) );
+
+            ssi.addValueSource( new MapBasedValueSource( 
request.getSystemProperties() ) );
+
+            try
+            {
+                String interpolated = ssi.interpolate( 
interpolatedModel.getParent().getVersion() );
+                interpolatedModel.getParent().setVersion( interpolated );
+            }
+            catch ( Exception e )
+            {
+                ModelProblemCollectorRequest mpcr =
+                    new ModelProblemCollectorRequest( Severity.ERROR,
+                                                      Version.BASE 
).setMessage( "Failed to interpolate field: "
+                                                          + 
interpolatedModel.getParent().getVersion()
+                                                          + " on class: " 
).setException( e );
+                problems.add( mpcr );
+            }
+
+            
+        }
+        interpolatedModel.setPomFile( model.getPomFile() );
 
         // restore profiles with file activation to their value before full 
interpolation
         injectProfileActivations( model, originalActivations );
 
-        return result;
+        return interpolatedModel;
     }
 
     private ModelData readParent( Model childModel, ModelSource childSource, 
ModelBuildingRequest request,

http://git-wip-us.apache.org/repos/asf/maven/blob/f48c9f98/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/AbstractStringBasedModelInterpolator.java
----------------------------------------------------------------------
diff --git 
a/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/AbstractStringBasedModelInterpolator.java
 
b/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/AbstractStringBasedModelInterpolator.java
index cee376f..b47edbe 100644
--- 
a/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/AbstractStringBasedModelInterpolator.java
+++ 
b/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/AbstractStringBasedModelInterpolator.java
@@ -56,6 +56,12 @@ import org.codehaus.plexus.interpolation.ValueSource;
 public abstract class AbstractStringBasedModelInterpolator
     implements ModelInterpolator
 {
+    public static final String SHA1_PROPERTY = "sha1";
+
+    public static final String CHANGELIST_PROPERTY = "changelist";
+
+    public static final String REVISION_PROPERTY = "revision";
+
     private static final List<String> PROJECT_PREFIXES = Arrays.asList( 
"pom.", "project." );
 
     private static final Collection<String> TRANSLATED_PATH_EXPRESSIONS;
@@ -165,6 +171,20 @@ public abstract class AbstractStringBasedModelInterpolator
 
         valueSources.add( new MapBasedValueSource( config.getUserProperties() 
) );
 
+        // Overwrite existing values in model properties. Otherwise it's not 
possible
+        // to define the version via command line: mvn -Drevision=6.5.7 ...
+        if ( config.getSystemProperties().containsKey( REVISION_PROPERTY ) )
+        {
+            modelProperties.put( REVISION_PROPERTY, 
config.getSystemProperties().get( REVISION_PROPERTY ) );
+        }
+        if ( config.getSystemProperties().containsKey( CHANGELIST_PROPERTY ) )
+        {
+            modelProperties.put( CHANGELIST_PROPERTY, 
config.getSystemProperties().get( CHANGELIST_PROPERTY ) );
+        }
+        if ( config.getSystemProperties().containsKey( SHA1_PROPERTY ) )
+        {
+            modelProperties.put( SHA1_PROPERTY, 
config.getSystemProperties().get( SHA1_PROPERTY ) );
+        }
         valueSources.add( new MapBasedValueSource( modelProperties ) );
 
         valueSources.add( new MapBasedValueSource( 
config.getSystemProperties() ) );

http://git-wip-us.apache.org/repos/asf/maven/blob/f48c9f98/maven-model-builder/src/main/java/org/apache/maven/model/validation/DefaultModelValidator.java
----------------------------------------------------------------------
diff --git 
a/maven-model-builder/src/main/java/org/apache/maven/model/validation/DefaultModelValidator.java
 
b/maven-model-builder/src/main/java/org/apache/maven/model/validation/DefaultModelValidator.java
index 59b0532..e790f21 100644
--- 
a/maven-model-builder/src/main/java/org/apache/maven/model/validation/DefaultModelValidator.java
+++ 
b/maven-model-builder/src/main/java/org/apache/maven/model/validation/DefaultModelValidator.java
@@ -53,6 +53,7 @@ import org.apache.maven.model.building.ModelProblem.Severity;
 import org.apache.maven.model.building.ModelProblem.Version;
 import org.apache.maven.model.building.ModelProblemCollector;
 import org.apache.maven.model.building.ModelProblemCollectorRequest;
+import 
org.apache.maven.model.interpolation.AbstractStringBasedModelInterpolator;
 import org.codehaus.plexus.component.annotations.Component;
 import org.codehaus.plexus.util.StringUtils;
 
@@ -806,8 +807,10 @@ public class DefaultModelValidator
         // revision
         // sha1
         //
-        if ( string.trim().contains( "${changelist}" ) || 
string.trim().contains( "${revision}" )
-            || string.trim().contains( "${sha1}" ) )
+        string = string.trim();
+        if ( string.contains( "${" + 
AbstractStringBasedModelInterpolator.CHANGELIST_PROPERTY + "}" )
+            || string.contains( "${" + 
AbstractStringBasedModelInterpolator.REVISION_PROPERTY + "}" )
+            || string.contains( "${" + 
AbstractStringBasedModelInterpolator.SHA1_PROPERTY + "}" ) )
         {
             return true;
         }

Reply via email to