Author: sisbell Date: Mon Apr 20 19:51:57 2009 New Revision: 766833 URL: http://svn.apache.org/viewvc?rev=766833&view=rev Log: Support for specifying pom file on command line. The builder now checks (in order): 1) top-level maven project from config matches build pom parent; 2) relative path pom; 2) repository pom.
Modified: maven/components/trunk/maven-core/src/main/java/org/apache/maven/DefaultMaven.java maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultProjectBuilderConfiguration.java maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/ProjectBuilderConfiguration.java Modified: maven/components/trunk/maven-core/src/main/java/org/apache/maven/DefaultMaven.java URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/DefaultMaven.java?rev=766833&r1=766832&r2=766833&view=diff ============================================================================== --- maven/components/trunk/maven-core/src/main/java/org/apache/maven/DefaultMaven.java (original) +++ maven/components/trunk/maven-core/src/main/java/org/apache/maven/DefaultMaven.java Mon Apr 20 19:51:57 2009 @@ -282,6 +282,7 @@ if ( isRoot ) { project.setExecutionRoot( true ); + request.getProjectBuildingConfiguration().setTopLevelProjectForReactor(project); } if ( ( project.getPrerequisites() != null ) && ( project.getPrerequisites().getMaven() != null ) ) 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=766833&r1=766832&r2=766833&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 Mon Apr 20 19:51:57 2009 @@ -42,7 +42,6 @@ import org.apache.maven.model.PomClassicDomainModel; import org.apache.maven.model.ProcessorContext; import org.apache.maven.model.Profile; -import org.apache.maven.model.interpolator.DefaultInterpolator; import org.apache.maven.model.interpolator.Interpolator; import org.apache.maven.model.interpolator.InterpolatorProperty; import org.apache.maven.model.interpolator.PomInterpolatorTag; @@ -81,9 +80,6 @@ private RepositorySystem repositorySystem; @Requirement - private PlexusContainer container; - - @Requirement List<ModelEventListener> listeners; @Requirement @@ -460,9 +456,14 @@ if ( domainModel.getParentId() != null ) { List<DomainModel> mavenParents; - if ( isParentLocal( domainModel.getRelativePathOfParent(), pomFile.getParentFile() ) ) + MavenProject topProject = projectBuilderConfiguration.getTopLevelProjectFromReactor(); + if(useTopLevelProjectForParent(domainModel, topProject) ) + { + mavenParents = getDomainModelParentsFromLocalPath( domainModel, localRepository, remoteRepositories, topProject.getFile(), projectBuilderConfiguration ); + } + else if ( isParentLocal( domainModel.getRelativePathOfParent(), pomFile.getParentFile() ) ) { - mavenParents = getDomainModelParentsFromLocalPath( domainModel, localRepository, remoteRepositories, pomFile.getParentFile() ); + mavenParents = getDomainModelParentsFromLocalPath( domainModel, localRepository, remoteRepositories, pomFile.getParentFile(), projectBuilderConfiguration ); } else { @@ -513,11 +514,23 @@ // Lineage count is inclusive to add the POM read in itself. transformedDomainModel.setLineageCount( lineageCount + 1 ); - Model m = transformedDomainModel.getModel(); transformedDomainModel.setParentFile( parentFile ); return transformedDomainModel; } + + private static boolean useTopLevelProjectForParent(PomClassicDomainModel currentModel, MavenProject topProject) throws IOException + { + if(topProject == null || currentModel.getModel().getParent() == null) + { + return false; + } + + return topProject.getGroupId().equals(currentModel.getParentGroupId()) + && topProject.getArtifactId().equals(currentModel.getParentArtifactId()) + && topProject.getVersion().equals(currentModel.getParentVersion()); + + } private void validateModel( Model model, File pomFile ) throws InvalidProjectModelException @@ -646,7 +659,7 @@ * @throws IOException */ private List<DomainModel> getDomainModelParentsFromLocalPath( PomClassicDomainModel domainModel, ArtifactRepository localRepository, List<ArtifactRepository> remoteRepositories, - File projectDirectory ) + File projectDirectory, ProjectBuilderConfiguration projectBuilderConfiguration ) throws IOException { List<DomainModel> domainModels = new ArrayList<DomainModel>(); @@ -663,15 +676,23 @@ { parentFile = new File( parentFile.getAbsolutePath(), "pom.xml" ); } - - if ( !parentFile.isFile() ) + MavenProject topProject = projectBuilderConfiguration.getTopLevelProjectFromReactor(); + boolean isTop = useTopLevelProjectForParent(domainModel, topProject); + PomClassicDomainModel parentDomainModel = null; + if ( !isTop ) + { + if(!parentFile.isFile()) + { + throw new IOException( "File does not exist: File = " + parentFile.getAbsolutePath() ); + } + parentDomainModel = new PomClassicDomainModel( parentFile ); + parentDomainModel.setProjectDirectory( parentFile.getParentFile() ); + } + else { - throw new IOException( "File does not exist: File = " + parentFile.getAbsolutePath() ); + parentDomainModel = new PomClassicDomainModel(projectBuilderConfiguration.getTopLevelProjectFromReactor().getFile()); } - PomClassicDomainModel parentDomainModel = new PomClassicDomainModel( parentFile ); - parentDomainModel.setProjectDirectory( parentFile.getParentFile() ); - if ( !parentDomainModel.matchesParentOf( domainModel ) ) { logger.info( "Parent pom ids do not match: Parent File = " + parentFile.getAbsolutePath() + ", Parent ID = " + parentDomainModel.getId() + ", Child ID = " + domainModel.getId() @@ -691,9 +712,20 @@ domainModels.add( parentDomainModel ); if ( domainModel.getParentId() != null ) { - if ( isParentLocal( parentDomainModel.getRelativePathOfParent(), parentFile.getParentFile() ) ) + if(isTop) + { + if ( isParentLocal( parentDomainModel.getRelativePathOfParent(), parentFile.getParentFile() ) ) + { + domainModels.addAll( getDomainModelParentsFromLocalPath( parentDomainModel, localRepository, remoteRepositories, topProject.getFile(), projectBuilderConfiguration ) ); + } + else + { + domainModels.addAll( getDomainModelParentsFromRepository( parentDomainModel, localRepository, remoteRepositories ) ); + } + } + else if ( isParentLocal( parentDomainModel.getRelativePathOfParent(), parentFile.getParentFile() ) ) { - domainModels.addAll( getDomainModelParentsFromLocalPath( parentDomainModel, localRepository, remoteRepositories, parentFile.getParentFile() ) ); + domainModels.addAll( getDomainModelParentsFromLocalPath( parentDomainModel, localRepository, remoteRepositories, parentFile.getParentFile(), projectBuilderConfiguration ) ); } else { Modified: maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultProjectBuilderConfiguration.java URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultProjectBuilderConfiguration.java?rev=766833&r1=766832&r2=766833&view=diff ============================================================================== --- maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultProjectBuilderConfiguration.java (original) +++ maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultProjectBuilderConfiguration.java Mon Apr 20 19:51:57 2009 @@ -44,6 +44,18 @@ private Date buildStartTime; private List<ModelEventListener> listeners; + + private MavenProject topProject; + + public MavenProject getTopLevelProjectFromReactor() + { + return topProject; + } + + public void setTopLevelProjectForReactor(MavenProject mavenProject) + { + this.topProject = mavenProject; + } public ProjectBuilderConfiguration setGlobalProfileManager( ProfileManager globalProfileManager ) { Modified: maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/ProjectBuilderConfiguration.java URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/ProjectBuilderConfiguration.java?rev=766833&r1=766832&r2=766833&view=diff ============================================================================== --- maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/ProjectBuilderConfiguration.java (original) +++ maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/ProjectBuilderConfiguration.java Mon Apr 20 19:51:57 2009 @@ -32,4 +32,8 @@ Date getBuildStartTime(); ProjectBuilderConfiguration setBuildStartTime( Date buildStartTime ); + + MavenProject getTopLevelProjectFromReactor(); + + void setTopLevelProjectForReactor(MavenProject mavenProject); }