Author: bentmann Date: Tue Sep 1 12:36:12 2009 New Revision: 810004 URL: http://svn.apache.org/viewvc?rev=810004&view=rev Log: o Properly reported cycles in the imported models
Modified: maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilder.java Modified: maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilder.java URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilder.java?rev=810004&r1=810003&r2=810004&view=diff ============================================================================== --- maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilder.java (original) +++ maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilder.java Tue Sep 1 12:36:12 2009 @@ -22,8 +22,10 @@ import java.io.File; import java.io.IOException; import java.util.ArrayList; +import java.util.Collection; import java.util.Collections; import java.util.Iterator; +import java.util.LinkedHashSet; import java.util.List; import java.util.Map; @@ -109,6 +111,12 @@ public ModelBuildingResult build( ModelBuildingRequest request ) throws ModelBuildingException { + return build( request, new LinkedHashSet<String>() ); + } + + private ModelBuildingResult build( ModelBuildingRequest request, Collection<String> imports ) + throws ModelBuildingException + { DefaultModelBuildingResult result = new DefaultModelBuildingResult(); DefaultModelProblemCollector problems = new DefaultModelProblemCollector( null ); @@ -213,6 +221,13 @@ public ModelBuildingResult build( ModelBuildingRequest request, ModelBuildingResult result ) throws ModelBuildingException { + return build( request, result, new LinkedHashSet<String>() ); + } + + private ModelBuildingResult build( ModelBuildingRequest request, ModelBuildingResult result, + Collection<String> imports ) + throws ModelBuildingException + { Model resultModel = result.getEffectiveModel(); DefaultModelProblemCollector problems = new DefaultModelProblemCollector( result.getProblems() ); @@ -230,7 +245,7 @@ lifecycleBindingsInjector.injectLifecycleBindings( resultModel, request, problems ); } - importDependencyManagement( resultModel, request, problems ); + importDependencyManagement( resultModel, request, problems, imports ); dependencyManagementInjector.injectManagement( resultModel, request, problems ); @@ -544,7 +559,7 @@ } private void importDependencyManagement( Model model, ModelBuildingRequest request, - DefaultModelProblemCollector problems ) + DefaultModelProblemCollector problems, Collection<String> imports ) { DependencyManagement depMngt = model.getDependencyManagement(); @@ -553,6 +568,10 @@ return; } + String importing = model.getGroupId() + ':' + model.getArtifactId() + ':' + model.getVersion(); + + imports.add( importing ); + ModelResolver modelResolver = request.getModelResolver(); ModelBuildingRequest importRequest = null; @@ -574,6 +593,20 @@ String artifactId = dependency.getArtifactId(); String version = dependency.getVersion(); + String imported = groupId + ':' + artifactId + ':' + version; + + if ( imports.contains( imported ) ) + { + String message = "The dependencies of type=pom and with scope=import from a cycle: "; + for ( String modelId : imports ) + { + message += modelId + " -> "; + } + message += imported; + problems.addError( message ); + continue; + } + DependencyManagement importMngt = getCache( request.getModelCache(), groupId, artifactId, version, ModelCacheTag.IMPORT ); @@ -610,7 +643,7 @@ ModelBuildingResult importResult; try { - importResult = build( importRequest ); + importResult = build( importRequest, imports ); } catch ( ModelBuildingException e ) { @@ -640,6 +673,8 @@ importMngts.add( importMngt ); } + imports.remove( importing ); + dependencyManagementImporter.importManagement( model, importMngts, request, problems ); }