From b4874e382d3688adcdcc96dda79bde29ac6c29eb Mon Sep 17 00:00:00 2001 From: Britton Isbell Date: Fri, 24 Apr 2009 21:32:57 +0000 Subject: [PATCH] Now we do interpolation before management processing. This allow depMng/pluginMng to have interpolated values for group/artifact ids. git-svn-id: https://svn.apache.org/repos/asf/maven/components/trunk@768421 13f79535-47bb-0310-9956-ffa450edef68 --- .../mercury/MavenDependencyProcessor.java | 2 +- .../maven/mercury/MavenDomainModel.java | 7 ++++ .../apache/maven/model/ProcessorContext.java | 14 +++++--- .../project/DefaultMavenProjectBuilder.java | 35 +++++++++++++++---- .../maven/project/PomConstructionTest.java | 16 +++++++-- .../pom.xml | 19 ++++++++++ .../sub/pom.xml | 17 +++++++++ 7 files changed, 95 insertions(+), 15 deletions(-) create mode 100644 maven-project/src/test/resources-project-builder/dependency-management-with-interpolation/pom.xml create mode 100644 maven-project/src/test/resources-project-builder/dependency-management-with-interpolation/sub/pom.xml diff --git a/maven-mercury/src/main/java/org/apache/maven/mercury/MavenDependencyProcessor.java b/maven-mercury/src/main/java/org/apache/maven/mercury/MavenDependencyProcessor.java index 95b25a17ce..fbe38ab2e9 100644 --- a/maven-mercury/src/main/java/org/apache/maven/mercury/MavenDependencyProcessor.java +++ b/maven-mercury/src/main/java/org/apache/maven/mercury/MavenDependencyProcessor.java @@ -119,7 +119,7 @@ public List getDependencies( ArtifactMetadata bmd, MetadataRea } iModels.get(0).setMostSpecialized(true); - return new MavenDomainModel(ProcessorContext.build(iModels, null)).getDependencyMetadata(); + return new MavenDomainModel( ProcessorContext.processManagementNodes(ProcessorContext.build(iModels, null).getModel() ) ).getDependencyMetadata(); } catch (IOException e) { throw new DependencyProcessorException(e); } diff --git a/maven-mercury/src/main/java/org/apache/maven/mercury/MavenDomainModel.java b/maven-mercury/src/main/java/org/apache/maven/mercury/MavenDomainModel.java index 229875e3c1..10fbf4e54d 100644 --- a/maven-mercury/src/main/java/org/apache/maven/mercury/MavenDomainModel.java +++ b/maven-mercury/src/main/java/org/apache/maven/mercury/MavenDomainModel.java @@ -27,6 +27,7 @@ import org.apache.maven.mercury.artifact.ArtifactMetadata; import org.apache.maven.model.Dependency; import org.apache.maven.model.Exclusion; +import org.apache.maven.model.Model; import org.apache.maven.model.Parent; import org.apache.maven.model.PomClassicDomainModel; @@ -54,6 +55,12 @@ public MavenDomainModel(PomClassicDomainModel model) super(model.getModel()); } + public MavenDomainModel(Model model) + throws IOException + { + super(model); + } + public boolean hasParent() { return getParentMetadata() != null; diff --git a/maven-model-builder/src/main/java/org/apache/maven/model/ProcessorContext.java b/maven-model-builder/src/main/java/org/apache/maven/model/ProcessorContext.java index 021e2280af..539a7fa8fe 100644 --- a/maven-model-builder/src/main/java/org/apache/maven/model/ProcessorContext.java +++ b/maven-model-builder/src/main/java/org/apache/maven/model/ProcessorContext.java @@ -251,6 +251,14 @@ else if ( i < length - 2 ) } } } + + return target; + + } + + public static Model processManagementNodes(Model target) + throws IOException + { // Dependency Management DependencyManagementProcessor depProc = new DependencyManagementProcessor(); @@ -261,16 +269,14 @@ else if ( i < length - 2 ) } // Plugin Management - PluginsManagementProcessor procMng = new PluginsManagementProcessor(); if ( target.getBuild() != null && target.getBuild().getPluginManagement() != null) { procMng.process( null, new ArrayList( target.getBuild().getPluginManagement().getPlugins() ), target.getBuild().getPlugins(), true ); } - - return target; - + + return target; } public static Profile copyOfProfile(Profile profile) diff --git a/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java b/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java index 0da18f7b0a..f8866f2d68 100644 --- a/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java +++ b/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java @@ -160,14 +160,22 @@ public MavenProject build( File pomFile, ProjectBuilderConfiguration configurati } domainModel = ProcessorContext.mergeProfilesIntoModel( externalProfiles, domainModel ); + } catch ( IOException e ) { throw new ProjectBuildingException("", ""); } - //Interpolation - MavenProject project = interpolateDomainModel( domainModel, configuration, pomFile ); + //Interpolation & Management + MavenProject project; + try { + Model model = ProcessorContext.processManagementNodes(interpolateDomainModel( domainModel, configuration, pomFile )); + project = this.fromDomainModelToMavenProject(model, domainModel.getParentFile(), configuration, pomFile); + } catch (IOException e) { + throw new ProjectBuildingException("", ""); + } + project.setActiveProfiles( projectProfiles ); Build build = project.getBuild(); @@ -269,7 +277,14 @@ public MavenProject buildFromRepository(Artifact artifact, ProjectBuilderConfigu { throw new ProjectBuildingException("", ""); } - project = interpolateDomainModel( domainModel, configuration, artifact.getFile() ); + + try { + Model model = ProcessorContext.processManagementNodes(interpolateDomainModel( domainModel, configuration, artifact.getFile() )); + project = this.fromDomainModelToMavenProject(model, domainModel.getParentFile(), configuration, artifact.getFile()); + } catch (IOException e) { + throw new ProjectBuildingException("", ""); + } + project.setActiveProfiles( projectProfiles ); artifact.setFile( artifact.getFile() ); project.setVersion( artifact.getVersion() ); @@ -368,7 +383,7 @@ public MavenProjectBuildingResult buildProjectWithDependencies( File pomFile, Pr return new MavenProjectBuildingResult( project, result ); } - private MavenProject interpolateDomainModel( PomClassicDomainModel domainModel, ProjectBuilderConfiguration config, File projectDescriptor ) + private Model interpolateDomainModel( PomClassicDomainModel domainModel, ProjectBuilderConfiguration config, File projectDescriptor ) throws ProjectBuildingException { Model model; @@ -403,9 +418,15 @@ private MavenProject interpolateDomainModel( PomClassicDomainModel domainModel, throw new ProjectBuildingException(projectId, "", projectDescriptor, e); } + return model; + } + + private MavenProject fromDomainModelToMavenProject(Model model, File parentFile, ProjectBuilderConfiguration config, File projectDescriptor) + throws InvalidProjectModelException, IOException + { MavenProject project; - + String projectId = safeVersionlessKey( model.getGroupId(), model.getArtifactId() ); try { project = new MavenProject( model, repositorySystem, this, config ); @@ -415,7 +436,7 @@ private MavenProject interpolateDomainModel( PomClassicDomainModel domainModel, Artifact projectArtifact = repositorySystem.createArtifact( project.getGroupId(), project.getArtifactId(), project.getVersion(), null, project.getPackaging() ); project.setArtifact( projectArtifact ); - project.setParentFile( domainModel.getParentFile() ); + project.setParentFile( parentFile ); } catch ( InvalidRepositoryException e ) @@ -423,7 +444,7 @@ private MavenProject interpolateDomainModel( PomClassicDomainModel domainModel, throw new InvalidProjectModelException( projectId, e.getMessage(), projectDescriptor, e ); } - return project; + return project; } private PomClassicDomainModel build( String projectId, File pomFile, ProjectBuilderConfiguration projectBuilderConfiguration ) diff --git a/maven-project/src/test/java/org/apache/maven/project/PomConstructionTest.java b/maven-project/src/test/java/org/apache/maven/project/PomConstructionTest.java index 02794739ed..d6e92c621a 100644 --- a/maven-project/src/test/java/org/apache/maven/project/PomConstructionTest.java +++ b/maven-project/src/test/java/org/apache/maven/project/PomConstructionTest.java @@ -1419,13 +1419,23 @@ public void testDependencyScopeInheritance() assertNull("Scope not null: " + scope, scope); System.out.println(pom.getDomainModel().asString()); - } + } + public void testDependencyScope() throws Exception { PomTestWrapper pom = buildPom( "dependency-scope/sub" ); - System.out.println(pom.getDomainModel().asString()); - } + // System.out.println(pom.getDomainModel().asString()); + } + + //This will fail on a validation error if incorrect + public void testDependencyManagementWithInterpolation() + throws Exception + { + PomTestWrapper pom = buildPom( "dependency-management-with-interpolation/sub" ); + } + + private void assertPathSuffixEquals( String expected, Object actual ) { String a = actual.toString(); diff --git a/maven-project/src/test/resources-project-builder/dependency-management-with-interpolation/pom.xml b/maven-project/src/test/resources-project-builder/dependency-management-with-interpolation/pom.xml new file mode 100644 index 0000000000..49ffab5a50 --- /dev/null +++ b/maven-project/src/test/resources-project-builder/dependency-management-with-interpolation/pom.xml @@ -0,0 +1,19 @@ + + 4.0.0 + + asm-parent + asm + 3.0 + pom + + + + + asm-util + ${project.groupId} + ${project.version} + + + + + diff --git a/maven-project/src/test/resources-project-builder/dependency-management-with-interpolation/sub/pom.xml b/maven-project/src/test/resources-project-builder/dependency-management-with-interpolation/sub/pom.xml new file mode 100644 index 0000000000..2423568ef8 --- /dev/null +++ b/maven-project/src/test/resources-project-builder/dependency-management-with-interpolation/sub/pom.xml @@ -0,0 +1,17 @@ + + + asm-parent + asm + 3.0 + + 4.0.0 + + asm-xml + 3.0 + + + asm + asm-util + + + \ No newline at end of file