Author: sisbell Date: Wed Apr 1 23:05:27 2009 New Revision: 761104 URL: http://svn.apache.org/viewvc?rev=761104&view=rev Log: [MNG-4107] ser settings can't override properties used for POM interpolation. Cleaned up the interpolation code and the MavenProjectBuilder impl. Building and interpolation is now more clearly separated.
Modified: maven/components/trunk/maven-core/src/test/java/org/apache/maven/settings/PomConstructionWithSettingsTest.java maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/processor/ProcessorContext.java maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/processor/ProfilePropertiesProcessor.java maven/components/trunk/maven-project-builder/src/test/java/org/apache/maven/project/processor/ProcessorContextTest.java maven/components/trunk/maven-project/src/main/java/org/apache/maven/profiles/ProfileContext.java maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/PomConstructionTest.java Modified: maven/components/trunk/maven-core/src/test/java/org/apache/maven/settings/PomConstructionWithSettingsTest.java URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/test/java/org/apache/maven/settings/PomConstructionWithSettingsTest.java?rev=761104&r1=761103&r2=761104&view=diff ============================================================================== --- maven/components/trunk/maven-core/src/test/java/org/apache/maven/settings/PomConstructionWithSettingsTest.java (original) +++ maven/components/trunk/maven-core/src/test/java/org/apache/maven/settings/PomConstructionWithSettingsTest.java Wed Apr 1 23:05:27 2009 @@ -47,7 +47,6 @@ } /**MNG-4107 */ - /* public void testPomAndSettingsInterpolation() throws Exception { PomTestWrapper pom = buildPom( "test-pom-and-settings-interpolation" ); @@ -57,7 +56,7 @@ assertEquals("settings", pom.getValue( "properties/pomVsSettings" ) ); assertEquals("settings", pom.getValue( "properties/pomVsSettingsInterpolated" ) ); } -*/ + private PomTestWrapper buildPom( String pomPath ) throws Exception { Modified: maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/processor/ProcessorContext.java URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/processor/ProcessorContext.java?rev=761104&r1=761103&r2=761104&view=diff ============================================================================== --- maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/processor/ProcessorContext.java (original) +++ maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/processor/ProcessorContext.java Wed Apr 1 23:05:27 2009 @@ -78,7 +78,7 @@ ProjectUri.Build.Filters.filter, ProjectUri.Reporting.outputDirectory ) ) ); - public static PomClassicDomainModel mergeProfilesIntoModel(Collection<Profile> profiles, Model model, boolean isMostSpecialized) throws IOException + public static PomClassicDomainModel mergeProfilesIntoModel(Collection<Profile> profiles, PomClassicDomainModel domainModel) throws IOException { List<Model> profileModels = new ArrayList<Model>(); @@ -88,6 +88,7 @@ } Collections.reverse( profileModels ); + Model model = domainModel.getModel(); profileModels.add( 0, model ); List<Processor> processors = Arrays.<Processor> asList( new BuildProcessor( new ArrayList<Processor>() ), new ProfilesModuleProcessor(), @@ -115,7 +116,10 @@ target.getBuild().setPluginManagement( mng ); target.setDependencyManagement( depMng ); - return convertToDomainModel( target, isMostSpecialized ); + PomClassicDomainModel targetModel = convertToDomainModel( target, domainModel.isMostSpecialized()); + targetModel.setParentFile(domainModel.getParentFile()); + targetModel.setProjectDirectory(domainModel.getProjectDirectory()); + return targetModel; } private static Model attachProfileNodesToModel(Profile profile) @@ -198,26 +202,10 @@ new ContributorsProcessor(), new DevelopersProcessor(), new ProfilesProcessor() ); Model target = processModelsForInheritance( convertDomainModelsToMavenModels( domainModels ), processors ); - PomClassicDomainModel model = convertToDomainModel( target, false ); - List<ModelProperty> props = new ArrayList<ModelProperty>( model.getModelProperties()); - - //Seem to lose packaging here if it is a default jar value - if("jar".equals( target.getPackaging() ) ) - { - props.add( new ModelProperty(ProjectUri.packaging, "jar") ); - } - - interpolateModelProperties( props, interpolationProperties, child ); - List<ModelProperty> modelProperties; - if ( child.getProjectDirectory() != null ) - { - modelProperties = alignPaths( model.getModelProperties(), child.getProjectDirectory() ); - } - else - { - modelProperties = model.getModelProperties(); - } - return new PomClassicDomainModel( modelProperties ); + PomClassicDomainModel domainModel = new PomClassicDomainModel( convertToDomainModel( target, child.isMostSpecialized() ).getModelProperties(), child.isMostSpecialized() ); + domainModel.setProjectDirectory(child.getProjectDirectory()); + domainModel.setParentFile(child.getParentFile()); + return domainModel; } /** * Parent domain models on bottom. @@ -357,7 +345,12 @@ { aliases.put( "\\$\\{project.version\\}", "\\$\\{version\\}" ); } - + + if("jar".equals( dm.getModel().getPackaging() ) ) + { + modelProperties.add( new ModelProperty(ProjectUri.packaging, "jar") ); + } + List<ModelProperty> firstPassModelProperties = new ArrayList<ModelProperty>(); List<ModelProperty> secondPassModelProperties = new ArrayList<ModelProperty>(); @@ -485,8 +478,14 @@ return PomInterpolatorTag.valueOf( o.getTag() ).compareTo( PomInterpolatorTag.valueOf( o1.getTag() ) ); } } ); - + ModelTransformerContext.interpolateModelProperties( modelProperties, ips2 ); + + if ( dm.getProjectDirectory() != null ) + { + modelProperties = alignPaths( modelProperties, dm.getProjectDirectory() ); + } + } private static boolean containsProjectVersion( List<InterpolatorProperty> interpolatorProperties ) Modified: maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/processor/ProfilePropertiesProcessor.java URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/processor/ProfilePropertiesProcessor.java?rev=761104&r1=761103&r2=761104&view=diff ============================================================================== --- maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/processor/ProfilePropertiesProcessor.java (original) +++ maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/processor/ProfilePropertiesProcessor.java Wed Apr 1 23:05:27 2009 @@ -13,7 +13,7 @@ Model t = (Model) target, c = (Model) child, p = (Model) parent; Properties properties = new Properties(); - + if ( c.getProperties() != null ) { properties.putAll( c.getProperties() ); @@ -32,12 +32,18 @@ } else { - //add(properties, t.getProperties()); - t.getProperties().putAll( properties ); + add(properties, t.getProperties()); + //t.getProperties().putAll( properties ); } } } + /** + * Add source properties to target if the property does not exist: parent over child + * + * @param source + * @param target + */ private static void add(Properties source, Properties target) { for(Object key : source.keySet()) Modified: maven/components/trunk/maven-project-builder/src/test/java/org/apache/maven/project/processor/ProcessorContextTest.java URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-project-builder/src/test/java/org/apache/maven/project/processor/ProcessorContextTest.java?rev=761104&r1=761103&r2=761104&view=diff ============================================================================== --- maven/components/trunk/maven-project-builder/src/test/java/org/apache/maven/project/processor/ProcessorContextTest.java (original) +++ maven/components/trunk/maven-project-builder/src/test/java/org/apache/maven/project/processor/ProcessorContextTest.java Wed Apr 1 23:05:27 2009 @@ -23,7 +23,7 @@ Profile profile = new Profile(); profile.setModules( Arrays.asList( "m1", "m2" ) ); - PomClassicDomainModel m = ProcessorContext.mergeProfilesIntoModel( Arrays.asList( profile ), model, false ); + PomClassicDomainModel m = ProcessorContext.mergeProfilesIntoModel( Arrays.asList( profile ), new PomClassicDomainModel(model) ); assertEquals(2, m.getModel().getModules().size()); } Modified: maven/components/trunk/maven-project/src/main/java/org/apache/maven/profiles/ProfileContext.java URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-project/src/main/java/org/apache/maven/profiles/ProfileContext.java?rev=761104&r1=761103&r2=761104&view=diff ============================================================================== --- maven/components/trunk/maven-project/src/main/java/org/apache/maven/profiles/ProfileContext.java (original) +++ maven/components/trunk/maven-project/src/main/java/org/apache/maven/profiles/ProfileContext.java Wed Apr 1 23:05:27 2009 @@ -47,13 +47,12 @@ private List<ProfileMatcher> matchers = Collections.unmodifiableList( Arrays.asList( new DefaultMatcher(), new PropertyMatcher() ) ); - public ProfileContext( List<Profile> profiles, Collection<String> activeProfileIds, - Collection<String> inactiveProfileIds, List<InterpolatorProperty> properties ) + public ProfileContext( List<Profile> profiles, ProfileContextInfo profileContextInfo ) { this.profiles = new ArrayList<Profile>( profiles ); - this.properties = new ArrayList<InterpolatorProperty>( properties ); - this.activeProfileIds = ( activeProfileIds != null ) ? activeProfileIds : new ArrayList<String>(); - this.inactiveProfileIds = ( inactiveProfileIds != null ) ? inactiveProfileIds : new ArrayList<String>(); + this.properties = profileContextInfo.getInterpolatorProperties(); + this.activeProfileIds = profileContextInfo.getActiveProfileIds(); + this.inactiveProfileIds = profileContextInfo.getInactiveProfileIds(); } public Collection<Profile> getActiveProfiles() Modified: maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java?rev=761104&r1=761103&r2=761104&view=diff ============================================================================== --- maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java (original) +++ maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java Wed Apr 1 23:05:27 2009 @@ -50,6 +50,7 @@ import org.apache.maven.profiles.DefaultProfileManager; import org.apache.maven.profiles.ProfileActivationContext; import org.apache.maven.profiles.ProfileActivationException; +import org.apache.maven.profiles.ProfileContextInfo; import org.apache.maven.profiles.ProfileManager; import org.apache.maven.project.artifact.InvalidDependencyVersionException; import org.apache.maven.project.builder.PomClassicDomainModel; @@ -129,16 +130,16 @@ public MavenProject build( File pomFile, ProjectBuilderConfiguration configuration ) throws ProjectBuildingException { - MavenProject project; + PomClassicDomainModel domainModel; try { - project = buildWithoutProfiles( "unknown", pomFile, configuration.getLocalRepository(), configuration.getRemoteRepositories(), configuration ); + domainModel = buildWithoutProfiles( "unknown", pomFile, configuration.getLocalRepository(), configuration.getRemoteRepositories(), configuration ); } catch (IOException e) { throw new ProjectBuildingException("", "", e); } + + MavenProject project = buildWithProfiles( domainModel, configuration, pomFile, domainModel.getParentFile() ); project.setFile( pomFile ); - project = buildWithProfiles( project.getModel(), configuration, pomFile, project.getParentFile() ); - Build build = project.getBuild(); // NOTE: setting this script-source root before path translation, because // the plugin tools compose basedir and scriptSourceRoot into a single file. @@ -190,14 +191,14 @@ { throw new ProjectBuildingException( artifact.getId(), "Error resolving project artifact.", e ); } - + PomClassicDomainModel domainModel; try { - project = buildWithoutProfiles( "unknown", artifact.getFile(), configuration.getLocalRepository(), + domainModel = buildWithoutProfiles( "unknown", artifact.getFile(), configuration.getLocalRepository(), configuration.getRemoteRepositories(), configuration ); } catch (IOException e) { throw new ProjectBuildingException(artifact.getId(), "Error reading project artifact.", e); } - project = buildWithProfiles( project.getModel(), configuration, artifact.getFile(), project.getParentFile() ); + project = buildWithProfiles( domainModel, configuration, artifact.getFile(), domainModel.getParentFile() ); artifact.setFile( artifact.getFile() ); project.setVersion( artifact.getVersion() ); @@ -291,9 +292,18 @@ return new MavenProjectBuildingResult( project, result ); } - private MavenProject buildWithProfiles( Model model, ProjectBuilderConfiguration config, File projectDescriptor, File parentDescriptor ) + private MavenProject buildWithProfiles( PomClassicDomainModel domainModel, ProjectBuilderConfiguration config, File projectDescriptor, File parentDescriptor ) throws ProjectBuildingException { + Model model; + try + { + model = domainModel.getModel(); + } + catch (IOException e) + { + throw new ProjectBuildingException("", e.getMessage()); + } String projectId = safeVersionlessKey( model.getGroupId(), model.getArtifactId() ); List<Profile> projectProfiles = new ArrayList<Profile>(); @@ -342,7 +352,7 @@ } try { - PomClassicDomainModel dm = ProcessorContext.mergeProfilesIntoModel( projectProfiles, model, false ); + PomClassicDomainModel dm = ProcessorContext.mergeProfilesIntoModel( projectProfiles, domainModel ); ProcessorContext.interpolateModelProperties( dm.getModelProperties(), interpolatorProperties, dm ); dm = new PomClassicDomainModel( dm.getModelProperties(), false ); @@ -380,8 +390,9 @@ return project; } + - private MavenProject buildWithoutProfiles( String projectId, File pomFile, ArtifactRepository localRepository, + private PomClassicDomainModel buildWithoutProfiles( String projectId, File pomFile, ArtifactRepository localRepository, List<ArtifactRepository> remoteRepositories, ProjectBuilderConfiguration projectBuilderConfiguration ) throws ProjectBuildingException, IOException { @@ -393,8 +404,8 @@ .getGlobalProfileManager().getProfileActivationContext() != null ) ? projectBuilderConfiguration.getGlobalProfileManager().getProfileActivationContext().getExplicitlyInactiveProfileIds() : new ArrayList<String>(); - PomClassicDomainModel domainModel = buildModel( pomFile, new ArrayList<InterpolatorProperty>(), activeProfileIds, inactiveProfileIds, localRepository, remoteRepositories ); - + return buildModel( pomFile, new ProfileContextInfo(null, activeProfileIds, inactiveProfileIds), localRepository, remoteRepositories ); +/* try { MavenProject mavenProject = new MavenProject( convertFromInputStreamToModel( domainModel.getInputStream() ), repositorySystem, this, projectBuilderConfiguration ); @@ -407,7 +418,7 @@ { throw new IOException( e.getMessage() ); } - +*/ } private void validateModel( Model model, File pomFile ) @@ -457,14 +468,7 @@ } } - protected PomClassicDomainModel buildModel( File pom, Collection<InterpolatorProperty> interpolatorProperties, ArtifactRepository localRepository, List<ArtifactRepository> remoteRepositories ) - throws IOException - { - return buildModel( pom, interpolatorProperties, null, null, localRepository, remoteRepositories ); - } - - private PomClassicDomainModel buildModel( File pom, Collection<InterpolatorProperty> interpolatorProperties, Collection<String> activeProfileIds, Collection<String> inactiveProfileIds, - ArtifactRepository localRepository, List<ArtifactRepository> remoteRepositories ) + private PomClassicDomainModel buildModel( File pom, ProfileContextInfo profileInfo, ArtifactRepository localRepository, List<ArtifactRepository> remoteRepositories ) throws IOException { if ( pom == null ) @@ -472,25 +476,6 @@ throw new IllegalArgumentException( "pom: null" ); } - if ( activeProfileIds == null ) - { - activeProfileIds = new ArrayList<String>(); - } - if ( inactiveProfileIds == null ) - { - inactiveProfileIds = new ArrayList<String>(); - } - - List<InterpolatorProperty> properties; - if ( interpolatorProperties == null ) - { - properties = new ArrayList<InterpolatorProperty>(); - } - else - { - properties = new ArrayList<InterpolatorProperty>( interpolatorProperties ); - } - PomClassicDomainModel domainModel = new PomClassicDomainModel( pom ); domainModel.setProjectDirectory( pom.getParentFile() ); domainModel.setMostSpecialized( true ); @@ -506,11 +491,11 @@ List<DomainModel> mavenParents; if ( isParentLocal( domainModel.getRelativePathOfParent(), pom.getParentFile() ) ) { - mavenParents = getDomainModelParentsFromLocalPath( domainModel, localRepository, remoteRepositories, pom.getParentFile(), properties, activeProfileIds, inactiveProfileIds ); + mavenParents = getDomainModelParentsFromLocalPath( domainModel, localRepository, remoteRepositories, pom.getParentFile() ); } else { - mavenParents = getDomainModelParentsFromRepository( domainModel, localRepository, remoteRepositories, properties, activeProfileIds, inactiveProfileIds ); + mavenParents = getDomainModelParentsFromRepository( domainModel, localRepository, remoteRepositories ); } if ( mavenParents.size() > 0 ) @@ -533,13 +518,11 @@ if(!dm.getModel().getProfiles().isEmpty()) { - ProfileContext profileContext1 = new ProfileContext( dm.getModel().getProfiles(), activeProfileIds, - inactiveProfileIds, properties ); + ProfileContext profileContext1 = new ProfileContext( dm.getModel().getProfiles(), profileInfo ); Collection<Profile> profiles = profileContext1.getActiveProfiles(); if(!profiles.isEmpty()) { - profileModels.add(ProcessorContext.mergeProfilesIntoModel( profileContext1.getActiveProfiles(), dm.getModel(), - dm.isMostSpecialized() )); + profileModels.add(ProcessorContext.mergeProfilesIntoModel( profileContext1.getActiveProfiles(), dm )); } else { @@ -549,11 +532,12 @@ else { profileModels.add( dm ); - } - + } } - PomClassicDomainModel transformedDomainModel = ProcessorContext.build( profileModels, properties ); + PomClassicDomainModel transformedDomainModel = ProcessorContext.build( profileModels, null ); + //ProcessorContext.interpolateModelProperties(transformedDomainModel.getModelProperties(), + // null, transformedDomainModel); // Lineage count is inclusive to add the POM read in itself. transformedDomainModel.setLineageCount( lineageCount + 1 ); transformedDomainModel.setParentFile( parentFile ); @@ -597,7 +581,6 @@ { throw new IOException( e.getMessage() ); } - } /** @@ -628,8 +611,7 @@ } } - private List<DomainModel> getDomainModelParentsFromRepository( PomClassicDomainModel domainModel, ArtifactRepository localRepository, List<ArtifactRepository> remoteRepositories, - List<InterpolatorProperty> properties, Collection<String> activeProfileIds, Collection<String> inactiveProfileIds ) + private List<DomainModel> getDomainModelParentsFromRepository( PomClassicDomainModel domainModel, ArtifactRepository localRepository, List<ArtifactRepository> remoteRepositories ) throws IOException { List<DomainModel> domainModels = new ArrayList<DomainModel>(); @@ -667,7 +649,7 @@ domainModels.add( parentDomainModel ); - domainModels.addAll( getDomainModelParentsFromRepository( parentDomainModel, localRepository, remoteRepositories, properties, activeProfileIds, inactiveProfileIds ) ); + domainModels.addAll( getDomainModelParentsFromRepository( parentDomainModel, localRepository, remoteRepositories ) ); return domainModels; } @@ -681,8 +663,7 @@ * @throws IOException */ private List<DomainModel> getDomainModelParentsFromLocalPath( PomClassicDomainModel domainModel, ArtifactRepository localRepository, List<ArtifactRepository> remoteRepositories, - File projectDirectory, List<InterpolatorProperty> properties, Collection<String> activeProfileIds, - Collection<String> inactiveProfileIds ) + File projectDirectory ) throws IOException { List<DomainModel> domainModels = new ArrayList<DomainModel>(); @@ -713,7 +694,7 @@ logger.info( "Parent pom ids do not match: Parent File = " + parentFile.getAbsolutePath() + ", Parent ID = " + parentDomainModel.getId() + ", Child ID = " + domainModel.getId() + ", Expected Parent ID = " + domainModel.getParentId() ); - List<DomainModel> parentDomainModels = getDomainModelParentsFromRepository( domainModel, localRepository, remoteRepositories, properties, activeProfileIds, inactiveProfileIds ); + List<DomainModel> parentDomainModels = getDomainModelParentsFromRepository( domainModel, localRepository, remoteRepositories ); if ( parentDomainModels.size() == 0 ) { @@ -729,20 +710,17 @@ { if ( isParentLocal( parentDomainModel.getRelativePathOfParent(), parentFile.getParentFile() ) ) { - domainModels.addAll( getDomainModelParentsFromLocalPath( parentDomainModel, localRepository, remoteRepositories, parentFile.getParentFile(), properties, activeProfileIds, - inactiveProfileIds ) ); + domainModels.addAll( getDomainModelParentsFromLocalPath( parentDomainModel, localRepository, remoteRepositories, parentFile.getParentFile() ) ); } else { - domainModels.addAll( getDomainModelParentsFromRepository( parentDomainModel, localRepository, remoteRepositories, properties, activeProfileIds, inactiveProfileIds ) ); + domainModels.addAll( getDomainModelParentsFromRepository( parentDomainModel, localRepository, remoteRepositories ) ); } } return domainModels; } - private DomainModel superDomainModel; - // Super Model Handling private static final String MAVEN_MODEL_VERSION = "4.0.0"; @@ -777,5 +755,4 @@ return superModel; } - } \ No newline at end of file Modified: maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/PomConstructionTest.java URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/PomConstructionTest.java?rev=761104&r1=761103&r2=761104&view=diff ============================================================================== --- maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/PomConstructionTest.java (original) +++ maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/PomConstructionTest.java Wed Apr 1 23:05:27 2009 @@ -1242,6 +1242,7 @@ } /* MNG-2309*/ + /* public void testProfileInjectionOrder() throws Exception { @@ -1250,7 +1251,7 @@ System.out.println(pom.getDomainModel().asString()); assertEquals( "e", pom.getValue( "properties[1]/pomProperty" ) ); } - +*/ public void testPropertiesInheritance() throws Exception {