You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by si...@apache.org on 2008/08/25 19:05:06 UTC

svn commit: r688778 - in /maven/components/branches/sisbell-maven-2.1-profile/maven-project/src: main/java/org/apache/maven/project/ main/java/org/apache/maven/project/builder/ main/java/org/apache/maven/project/builder/impl/ test/java/org/apache/maven...

Author: sisbell
Date: Mon Aug 25 10:05:05 2008
New Revision: 688778

URL: http://svn.apache.org/viewvc?rev=688778&view=rev
Log:
Fix for calculating maven parent project.

Modified:
    maven/components/branches/sisbell-maven-2.1-profile/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
    maven/components/branches/sisbell-maven-2.1-profile/maven-project/src/main/java/org/apache/maven/project/MavenProject.java
    maven/components/branches/sisbell-maven-2.1-profile/maven-project/src/main/java/org/apache/maven/project/builder/PomClassicDomainModel.java
    maven/components/branches/sisbell-maven-2.1-profile/maven-project/src/main/java/org/apache/maven/project/builder/ProjectBuilder.java
    maven/components/branches/sisbell-maven-2.1-profile/maven-project/src/main/java/org/apache/maven/project/builder/impl/DefaultProjectBuilder.java
    maven/components/branches/sisbell-maven-2.1-profile/maven-project/src/test/java/org/apache/maven/project/inheritance/t09/ProjectInheritanceTest.java

Modified: maven/components/branches/sisbell-maven-2.1-profile/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
URL: http://svn.apache.org/viewvc/maven/components/branches/sisbell-maven-2.1-profile/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java?rev=688778&r1=688777&r2=688778&view=diff
==============================================================================
--- maven/components/branches/sisbell-maven-2.1-profile/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java (original)
+++ maven/components/branches/sisbell-maven-2.1-profile/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java Mon Aug 25 10:05:05 2008
@@ -38,10 +38,7 @@
 import org.apache.maven.profiles.activation.ProfileActivationException;
 import org.apache.maven.profiles.build.ProfileAdvisor;
 import org.apache.maven.project.artifact.InvalidDependencyVersionException;
-import org.apache.maven.project.build.model.DefaultModelLineage;
-import org.apache.maven.project.build.model.ModelLineage;
 import org.apache.maven.project.build.model.ModelLineageBuilder;
-import org.apache.maven.project.build.model.ModelLineageIterator;
 import org.apache.maven.project.builder.PomArtifactResolver;
 import org.apache.maven.project.builder.ProjectBuilder;
 import org.apache.maven.project.inheritance.ModelInheritanceAssembler;
@@ -171,13 +168,12 @@
         MavenProject project = null;//projectWorkspace.getProject( projectDescriptor );
 
         if (project == null) {
-            Model model = readModelFromLocalPath("unknown", projectDescriptor, new PomArtifactResolver(config.getLocalRepository(),
-                    repositoryHelper.buildArtifactRepositories(getSuperModel()), artifactResolver));
-            project = buildInternal(model,
+            project = readModelFromLocalPath("unknown", projectDescriptor, new PomArtifactResolver(config.getLocalRepository(),
+                    repositoryHelper.buildArtifactRepositories(getSuperModel()), artifactResolver), config);
+            project = buildInternal(project.getModel(),
                     config,
-                    repositoryHelper.buildArtifactRepositories(getSuperModel()),
                     projectDescriptor,
-                    STRICT_MODEL_PARSING,
+                    project.getParentFile(),
                     true,
                     true);
         }
@@ -212,9 +208,9 @@
             Model model = repositoryHelper.findModelFromRepository(artifact, remoteArtifactRepositories, localRepository);
 
             ProjectBuilderConfiguration config = new DefaultProjectBuilderConfiguration().setLocalRepository(localRepository);
-
-            project = buildInternal(model, config, remoteArtifactRepositories, artifact.getFile(),
-                    false, false, false);
+            //TODO: Construct parent
+            project = buildInternal(model, config, artifact.getFile(), null,
+                    false, false);
         }
 
         return project;
@@ -262,7 +258,7 @@
 
         MavenProject project;
         try {
-            project = new MavenProject(superModel, artifactFactory, mavenTools, repositoryHelper, this);
+            project = new MavenProject(superModel, artifactFactory, mavenTools, repositoryHelper, this, config);
         } catch (InvalidRepositoryException e) {
             throw new ProjectBuildingException(STANDALONE_SUPERPOM_GROUPID + ":"
                     + STANDALONE_SUPERPOM_ARTIFACTID,
@@ -274,7 +270,7 @@
         //project.setActiveProfiles(activeProfiles);
 
         try {
-            interpolateModelAndInjectDefault(project.getModel(), null, config, activeProfiles);
+            interpolateModelAndInjectDefault(project.getModel(), null, null, config, activeProfiles);
 
             project.setRemoteArtifactRepositories(mavenTools.buildArtifactRepositories(superModel.getRepositories()));
             project.setPluginArtifactRepositories(mavenTools.buildArtifactRepositories(superModel.getRepositories()));
@@ -376,16 +372,15 @@
 
     private MavenProject buildInternal(Model model,
                                        ProjectBuilderConfiguration config,
-                                       List parentSearchRepositories,
                                        File projectDescriptor,
-                                       boolean strict,
+                                       File parentDescriptor,
                                        boolean isReactorProject,
                                        boolean fromSourceTree)
             throws ProjectBuildingException {
 
         MavenProject superProject;
         try {
-            superProject = new MavenProject(getSuperModel(), artifactFactory, mavenTools, repositoryHelper, this);
+            superProject = new MavenProject(getSuperModel(), artifactFactory, mavenTools, repositoryHelper, this, config);
         } catch (InvalidRepositoryException e) {
             throw new ProjectBuildingException(STANDALONE_SUPERPOM_GROUPID + ":"
                     + STANDALONE_SUPERPOM_ARTIFACTID,
@@ -428,7 +423,7 @@
 
         MavenProject project;
         try {
-            project = interpolateModelAndInjectDefault(model, projectDescriptor, config, activated);
+            project = interpolateModelAndInjectDefault(model, projectDescriptor, parentDescriptor, config, activated);
         }
         catch (ModelInterpolationException e) {
             throw new InvalidProjectModelException(projectId, e.getMessage(), projectDescriptor, e);
@@ -460,6 +455,7 @@
 
     private MavenProject interpolateModelAndInjectDefault(Model model,
                                              File pomFile,
+                                             File parentFile,
                                              ProjectBuilderConfiguration config,
                                              List activeProfiles
     )
@@ -484,13 +480,13 @@
         modelDefaultsInjector.injectDefaults(model);
 
         // We will return a different project object using the new model (hence the need to return a project, not just modify the parameter)
-        MavenProject project = new MavenProject(model, artifactFactory, mavenTools, repositoryHelper, this);
+        MavenProject project = new MavenProject(model, artifactFactory, mavenTools, repositoryHelper, this, config);
         project.setActiveProfiles(activeProfiles);
 
         Artifact projectArtifact = artifactFactory.createBuildArtifact(project.getGroupId(), project.getArtifactId(),
                 project.getVersion(), project.getPackaging());
         project.setArtifact(projectArtifact);
-
+        project.setParentFile(parentFile);
         validateModel(model, pomFile);
         return project;
     }
@@ -654,9 +650,11 @@
         }
     }
 
-    private Model readModelFromLocalPath(String projectId,
+    private MavenProject readModelFromLocalPath(String projectId,
                                          File projectDescriptor,
-                                         PomArtifactResolver resolver)
+                                         PomArtifactResolver resolver,
+                                         ProjectBuilderConfiguration config
+                                       )
             throws ProjectBuildingException {
         if (projectDescriptor == null) {
             throw new IllegalArgumentException("projectDescriptor: null, Project Id =" + projectId);
@@ -670,13 +668,13 @@
         try {
             mavenProject = projectBuilder.buildFromLocalPath(new FileInputStream(projectDescriptor),
                     Arrays.asList(getSuperModel()), null, null, resolver,
-                    projectDescriptor.getParentFile());
+                    projectDescriptor.getParentFile(), config);
         } catch (IOException e) {
             e.printStackTrace();
             throw new ProjectBuildingException(projectId, "File = " + projectDescriptor.getAbsolutePath(), e);
         }
 
-        return mavenProject.getModel();
+        return mavenProject;
 
     }
 

Modified: maven/components/branches/sisbell-maven-2.1-profile/maven-project/src/main/java/org/apache/maven/project/MavenProject.java
URL: http://svn.apache.org/viewvc/maven/components/branches/sisbell-maven-2.1-profile/maven-project/src/main/java/org/apache/maven/project/MavenProject.java?rev=688778&r1=688777&r2=688778&view=diff
==============================================================================
--- maven/components/branches/sisbell-maven-2.1-profile/maven-project/src/main/java/org/apache/maven/project/MavenProject.java (original)
+++ maven/components/branches/sisbell-maven-2.1-profile/maven-project/src/main/java/org/apache/maven/project/MavenProject.java Mon Aug 25 10:05:05 2008
@@ -139,6 +139,18 @@
 
     private MavenProjectBuilder mavenProjectBuilder;
 
+    private ProjectBuilderConfiguration projectBuilderConfiguration;
+
+    private File parentFile;
+
+    public File getParentFile() {
+        return parentFile;
+    }
+
+    public void setParentFile(File parentFile) {
+        this.parentFile = parentFile;
+    }
+
     public MavenProject()
     {
         Model model = new Model();
@@ -156,13 +168,15 @@
     }
 
     public MavenProject(Model model, ArtifactFactory artifactFactory, MavenTools mavenTools,
-                        RepositoryHelper repositoryHelper, MavenProjectBuilder mavenProjectBuilder)
+                        RepositoryHelper repositoryHelper, MavenProjectBuilder mavenProjectBuilder,
+                        ProjectBuilderConfiguration projectBuilderConfiguration)
             throws InvalidRepositoryException {
         setModel( model );
         this.artifactFactory = artifactFactory;
         this.mavenTools = mavenTools;
         this.repositoryHelper = repositoryHelper;
         this.mavenProjectBuilder = mavenProjectBuilder;
+        this.projectBuilderConfiguration = projectBuilderConfiguration;
         originalModel = ModelUtils.cloneModel( model );
         DistributionManagement dm = model.getDistributionManagement();
 
@@ -221,6 +235,10 @@
             setArtifacts( Collections.unmodifiableSet( project.getArtifacts() ) );
         }
 
+        if(project.getParentFile()  != null) {
+            parentFile = new File(project.getParentFile().getAbsolutePath());
+        }
+
     //    if ( project.getPluginArtifacts() != null )
     //    {
            // setPluginArtifacts( Collections.unmodifiableSet( project.getPluginArtifacts() ) );
@@ -421,6 +439,13 @@
 
     public MavenProject getParent()
     {
+        if(parent == null && parentFile != null) {
+            try {
+                parent = mavenProjectBuilder.build(parentFile, projectBuilderConfiguration);
+            } catch (ProjectBuildingException e) {
+                e.printStackTrace();
+            }
+        }
         return parent;
     }
 

Modified: maven/components/branches/sisbell-maven-2.1-profile/maven-project/src/main/java/org/apache/maven/project/builder/PomClassicDomainModel.java
URL: http://svn.apache.org/viewvc/maven/components/branches/sisbell-maven-2.1-profile/maven-project/src/main/java/org/apache/maven/project/builder/PomClassicDomainModel.java?rev=688778&r1=688777&r2=688778&view=diff
==============================================================================
--- maven/components/branches/sisbell-maven-2.1-profile/maven-project/src/main/java/org/apache/maven/project/builder/PomClassicDomainModel.java (original)
+++ maven/components/branches/sisbell-maven-2.1-profile/maven-project/src/main/java/org/apache/maven/project/builder/PomClassicDomainModel.java Mon Aug 25 10:05:05 2008
@@ -29,11 +29,7 @@
 import org.codehaus.plexus.util.WriterFactory;
 import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
 
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.Writer;
+import java.io.*;
 
 /**
  * Provides a wrapper for the maven model.
@@ -59,6 +55,10 @@
 
     private String id;
 
+    private File file;
+
+    private File parentFile;
+
     /**
      * Constructor
      *
@@ -96,6 +96,20 @@
         this.inputBytes = IOUtil.toByteArray( inputStream );
     }
 
+    public PomClassicDomainModel(File file) 
+        throws IOException
+    {
+        this(new FileInputStream(file));
+        this.file = file;
+    }
+
+    public File getParentFile() {
+        return parentFile;
+    }
+
+    public void setParentFile(File parentFile) {
+        this.parentFile = parentFile;
+    }
 
     /**
      * Returns true if groupId.equals(a.groupId) && artifactId.equals(a.artifactId) && version.equals(a.version),
@@ -212,6 +226,16 @@
     }
 
     /**
+     *
+     *
+     * @return file of pom. May be null.
+     */
+    public File getFile()
+    {
+        return file;
+    }
+
+    /**
      * @see org.apache.maven.shared.model.DomainModel#getEventHistory()
      */
     public String getEventHistory()

Modified: maven/components/branches/sisbell-maven-2.1-profile/maven-project/src/main/java/org/apache/maven/project/builder/ProjectBuilder.java
URL: http://svn.apache.org/viewvc/maven/components/branches/sisbell-maven-2.1-profile/maven-project/src/main/java/org/apache/maven/project/builder/ProjectBuilder.java?rev=688778&r1=688777&r2=688778&view=diff
==============================================================================
--- maven/components/branches/sisbell-maven-2.1-profile/maven-project/src/main/java/org/apache/maven/project/builder/ProjectBuilder.java (original)
+++ maven/components/branches/sisbell-maven-2.1-profile/maven-project/src/main/java/org/apache/maven/project/builder/ProjectBuilder.java Mon Aug 25 10:05:05 2008
@@ -21,6 +21,7 @@
 
 import org.apache.maven.model.Model;
 import org.apache.maven.project.MavenProject;
+import org.apache.maven.project.ProjectBuilderConfiguration;
 import org.apache.maven.shared.model.InterpolatorProperty;
 import org.apache.maven.shared.model.ImportModel;
 
@@ -46,13 +47,14 @@
      * @param interpolatorProperties properties used for interpolation of properties within the model
      * @param resolver               artifact resolver used in resolving artifacts
      * @param baseDirectory          the base directory of the model
+     * @param projectBuilderConfiguration
      * @return a maven project for the specified input stream
      * @throws IOException if there is a problem in the construction of the maven project
      */
-    MavenProject buildFromLocalPath( InputStream pom, List<Model> inheritedModels,
-                                     Collection<ImportModel> importModels,
-                                     Collection<InterpolatorProperty> interpolatorProperties,
-                                     PomArtifactResolver resolver, File baseDirectory )
+    MavenProject buildFromLocalPath(InputStream pom, List<Model> inheritedModels,
+                                    Collection<ImportModel> importModels,
+                                    Collection<InterpolatorProperty> interpolatorProperties,
+                                    PomArtifactResolver resolver, File baseDirectory, ProjectBuilderConfiguration projectBuilderConfiguration)
         throws IOException;
 
 }

Modified: maven/components/branches/sisbell-maven-2.1-profile/maven-project/src/main/java/org/apache/maven/project/builder/impl/DefaultProjectBuilder.java
URL: http://svn.apache.org/viewvc/maven/components/branches/sisbell-maven-2.1-profile/maven-project/src/main/java/org/apache/maven/project/builder/impl/DefaultProjectBuilder.java?rev=688778&r1=688777&r2=688778&view=diff
==============================================================================
--- maven/components/branches/sisbell-maven-2.1-profile/maven-project/src/main/java/org/apache/maven/project/builder/impl/DefaultProjectBuilder.java (original)
+++ maven/components/branches/sisbell-maven-2.1-profile/maven-project/src/main/java/org/apache/maven/project/builder/impl/DefaultProjectBuilder.java Mon Aug 25 10:05:05 2008
@@ -24,8 +24,7 @@
 import org.apache.maven.artifact.factory.ArtifactFactory;
 import org.apache.maven.model.Model;
 import org.apache.maven.model.Parent;
-import org.apache.maven.project.MavenProject;
-import org.apache.maven.project.RepositoryHelper;
+import org.apache.maven.project.*;
 import org.apache.maven.project.builder.ArtifactModelContainerFactory;
 import org.apache.maven.project.builder.IdModelContainerFactory;
 import org.apache.maven.project.builder.PomArtifactResolver;
@@ -40,7 +39,6 @@
 import org.codehaus.plexus.logging.Logger;
 
 import java.io.File;
-import java.io.FileInputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.ArrayList;
@@ -69,6 +67,8 @@
 
     private RepositoryHelper repositoryHelper;
 
+    private MavenProjectBuilder mavenProjectBuilder;
+
     /**
      * Default constructor
      */
@@ -91,12 +91,13 @@
     }
 
     /**
-     * @see ProjectBuilder#buildFromLocalPath(java.io.InputStream, java.util.List, java.util.Collection, java.util.Collection, org.apache.maven.project.builder.PomArtifactResolver, java.io.File)
+     * @see ProjectBuilder#buildFromLocalPath(java.io.InputStream, java.util.List, java.util.Collection, java.util.Collection, org.apache.maven.project.builder.PomArtifactResolver, java.io.File, org.apache.maven.project.ProjectBuilderConfiguration)
      */
-    public MavenProject buildFromLocalPath( InputStream pom, List<Model> inheritedModels,
-                                            Collection<ImportModel> importModels,
-                                            Collection<InterpolatorProperty> interpolatorProperties,
-                                            PomArtifactResolver resolver, File projectDirectory )
+    public MavenProject buildFromLocalPath(InputStream pom, List<Model> inheritedModels,
+                                           Collection<ImportModel> importModels,
+                                           Collection<InterpolatorProperty> interpolatorProperties,
+                                           PomArtifactResolver resolver, File projectDirectory,
+                                           ProjectBuilderConfiguration projectBuilderConfiguration)
         throws IOException
     {
         if ( pom == null )
@@ -139,7 +140,7 @@
         domainModels.add( domainModel );
 
         MavenProject mavenParent = null;
-
+        File parentFile = null;
         if ( domainModel.getModel().getParent() != null )
         {
             List<DomainModel> mavenParents;
@@ -153,10 +154,14 @@
             }
 
             if(mavenParents.size() > 0) {
-                mavenParent = buildFromLocalPath( ((InputStreamDomainModel) mavenParents.get(0)).getInputStream(), inheritedModels,
-                        importModels, interpolatorProperties, resolver, projectDirectory);
+                PomClassicDomainModel dm = (PomClassicDomainModel) mavenParents.get(0);
+                parentFile = dm.getFile();
+                domainModel.setParentFile(parentFile);
+                // mavenParent = buildFromLocalPath( dm.getInputStream(), inheritedModels,
+                //        importModels, interpolatorProperties, resolver, projectDirectory);
+               // mavenParent.setFile(dm.getFile());
             }
-            
+
             domainModels.addAll(mavenParents);
         }
 
@@ -174,8 +179,10 @@
 
         Model model = transformedDomainModel.getModel();
         try {
-            MavenProject mavenProject = new MavenProject( model, artifactFactory, mavenTools, repositoryHelper, null);
+            MavenProject mavenProject = new MavenProject( model, artifactFactory, mavenTools, repositoryHelper, null,
+                    projectBuilderConfiguration);
             mavenProject.setParent(mavenParent);
+            mavenProject.setParentFile(parentFile);
             return mavenProject;
         } catch (InvalidRepositoryException e) {
             throw new IOException(e.getMessage());
@@ -223,7 +230,7 @@
         artifactResolver.resolve( artifactParent );
 
         PomClassicDomainModel parentDomainModel =
-            new PomClassicDomainModel( new FileInputStream( artifactParent.getFile() ) );
+            new PomClassicDomainModel( artifactParent.getFile()  );
         if ( !parentDomainModel.matchesParent( domainModel.getModel().getParent() ) )
         {
             logger.warn( "Parent pom ids do not match: File = " + artifactParent.getFile().getAbsolutePath() );
@@ -274,7 +281,7 @@
             throw new IOException( "File does not exist: File =" + parentFile.getAbsolutePath() );
         }
 
-        PomClassicDomainModel parentDomainModel = new PomClassicDomainModel( new FileInputStream( parentFile ) );
+        PomClassicDomainModel parentDomainModel = new PomClassicDomainModel( parentFile  );
         if ( !parentDomainModel.matchesParent( domainModel.getModel().getParent() ) )
         {
             logger.warn( "Parent pom ids do not match: File = " + parentFile.getAbsolutePath() );

Modified: maven/components/branches/sisbell-maven-2.1-profile/maven-project/src/test/java/org/apache/maven/project/inheritance/t09/ProjectInheritanceTest.java
URL: http://svn.apache.org/viewvc/maven/components/branches/sisbell-maven-2.1-profile/maven-project/src/test/java/org/apache/maven/project/inheritance/t09/ProjectInheritanceTest.java?rev=688778&r1=688777&r2=688778&view=diff
==============================================================================
--- maven/components/branches/sisbell-maven-2.1-profile/maven-project/src/test/java/org/apache/maven/project/inheritance/t09/ProjectInheritanceTest.java (original)
+++ maven/components/branches/sisbell-maven-2.1-profile/maven-project/src/test/java/org/apache/maven/project/inheritance/t09/ProjectInheritanceTest.java Mon Aug 25 10:05:05 2008
@@ -70,6 +70,7 @@
         MavenProject project0 = getProjectWithDependencies( pom0 );
         MavenProject project1 = getProjectWithDependencies( pom1 );
 
+        assertNotNull("Parent is null", project1.getParent());
         assertEquals( pom0Basedir, project1.getParent().getBasedir().getCanonicalFile() );
         Map map = project1.getArtifactMap();