You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by sc...@apache.org on 2016/02/19 01:13:47 UTC
[2/2] maven git commit: [MNG-5971] Imported dependencies should be
available to inheritance processing
[MNG-5971] Imported dependencies should be available to inheritance processing
o Updated to support property inheritance and interpolation in
'include' scope dependencies.
Project: http://git-wip-us.apache.org/repos/asf/maven/repo
Commit: http://git-wip-us.apache.org/repos/asf/maven/commit/b30be5d6
Tree: http://git-wip-us.apache.org/repos/asf/maven/tree/b30be5d6
Diff: http://git-wip-us.apache.org/repos/asf/maven/diff/b30be5d6
Branch: refs/heads/master
Commit: b30be5d6844693910a4861a644e4062021002d1f
Parents: 4f983e1
Author: Christian Schulte <sc...@apache.org>
Authored: Fri Feb 19 01:11:48 2016 +0100
Committer: Christian Schulte <sc...@apache.org>
Committed: Fri Feb 19 01:13:01 2016 +0100
----------------------------------------------------------------------
.../model/building/DefaultModelBuilder.java | 83 +++++++++++++++++++-
1 file changed, 79 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/maven/blob/b30be5d6/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 8872a5b..c57f836 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
@@ -384,6 +384,9 @@ public class DefaultModelBuilder
problems.setSource( inputModel );
checkPluginVersions( lineage, request, problems );
+ // include processing
+ includeDependencies( lineage, request, problems );
+
// inheritance assembly
assembleInheritance( lineage, request, problems );
@@ -616,9 +619,6 @@ public class DefaultModelBuilder
problems.setSource( model );
- this.importDependencyManagement( model, "include", request, problems, new HashSet<String>() );
- this.importDependencies( model, "include", request, problems, new HashSet<String>() );
-
modelValidator.validateRawModel( model, request, problems );
if ( hasFatalErrors( problems ) )
@@ -729,6 +729,82 @@ public class DefaultModelBuilder
}
}
+ private void includeDependencies( final List<ModelData> lineage, final ModelBuildingRequest request,
+ final DefaultModelProblemCollector problems )
+ {
+ // Creates an intermediate model with property inheritance and interpolation.
+ final List<Model> intermediateLineage = new ArrayList<>( lineage.size() );
+
+ for ( int i = 0, s0 = lineage.size(); i < s0; i++ )
+ {
+ final Model model = lineage.get( i ).getModel();
+ intermediateLineage.add( model.clone() );
+ }
+
+ for ( int i = intermediateLineage.size() - 2; i >= 0; i-- )
+ {
+ final Model parent = intermediateLineage.get( i + 1 );
+ final Model child = intermediateLineage.get( i );
+
+ final Properties properties = new Properties();
+ properties.putAll( parent.getProperties() );
+ properties.putAll( child.getProperties() );
+ child.setProperties( properties );
+ }
+
+ for ( int i = 0, s0 = intermediateLineage.size(); i < s0; i++ )
+ {
+ final Model model = intermediateLineage.get( i );
+ this.interpolateModel( model, request, problems );
+ }
+
+ // Exchanges 'include' scope dependencies in the original lineage with possibly interpolated values.
+ for ( int i = 0, s0 = lineage.size(); i < s0; i++ )
+ {
+ final Model model = lineage.get( i ).getModel();
+
+ if ( model.getDependencyManagement() != null )
+ {
+ for ( int j = 0, s1 = model.getDependencyManagement().getDependencies().size(); j < s1; j++ )
+ {
+ final Dependency dependency = model.getDependencyManagement().getDependencies().get( j );
+
+ if ( "include".equals( dependency.getScope() ) && "pom".equals( dependency.getType() ) )
+ {
+ final Dependency interpolated =
+ intermediateLineage.get( i ).getDependencyManagement().getDependencies().get( j );
+
+ model.getDependencyManagement().getDependencies().set( j, interpolated );
+ }
+ }
+ }
+
+ for ( int j = 0, s1 = model.getDependencies().size(); j < s1; j++ )
+ {
+ final Dependency dependency = model.getDependencies().get( j );
+
+ if ( "include".equals( dependency.getScope() ) && "pom".equals( dependency.getType() ) )
+ {
+ final Dependency interpolated = intermediateLineage.get( i ).getDependencies().get( j );
+ model.getDependencies().set( j, interpolated );
+ }
+ }
+ }
+
+ // Performs inclusion of dependencies in the original lineage.
+ for ( int i = 0, s0 = lineage.size(), superModelIdx = lineage.size() - 1; i < s0; i++ )
+ {
+ final Model model = lineage.get( i ).getModel();
+ this.importDependencyManagement( model, "include", request, problems, new HashSet<String>() );
+ this.importDependencies( model, "include", request, problems, new HashSet<String>() );
+
+ if ( i != superModelIdx )
+ {
+ modelValidator.validateRawModel( model, request, problems );
+ }
+ }
+ }
+
private void assembleInheritance( List<ModelData> lineage, ModelBuildingRequest request,
ModelProblemCollector problems )
{
@@ -1187,7 +1263,6 @@ public class DefaultModelBuilder
}
message += imported;
problems.add( new ModelProblemCollectorRequest( Severity.ERROR, Version.BASE ).setMessage( message ) );
-
continue;
}