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/07/16 00:39:04 UTC

svn commit: r677074 - in /maven/sandbox/branches/SI_MAVEN_2_1/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/project/

Author: sisbell
Date: Tue Jul 15 15:39:03 2008
New Revision: 677074

URL: http://svn.apache.org/viewvc?rev=677074&view=rev
Log:
Fix for finding poms on local path.

Modified:
    maven/sandbox/branches/SI_MAVEN_2_1/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
    maven/sandbox/branches/SI_MAVEN_2_1/maven-project/src/main/java/org/apache/maven/project/builder/ProjectBuilder.java
    maven/sandbox/branches/SI_MAVEN_2_1/maven-project/src/main/java/org/apache/maven/project/builder/impl/DefaultProjectBuilder.java
    maven/sandbox/branches/SI_MAVEN_2_1/maven-project/src/test/java/org/apache/maven/project/AbstractMavenProjectTestCase.java

Modified: maven/sandbox/branches/SI_MAVEN_2_1/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
URL: http://svn.apache.org/viewvc/maven/sandbox/branches/SI_MAVEN_2_1/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java?rev=677074&r1=677073&r2=677074&view=diff
==============================================================================
--- maven/sandbox/branches/SI_MAVEN_2_1/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java (original)
+++ maven/sandbox/branches/SI_MAVEN_2_1/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java Tue Jul 15 15:39:03 2008
@@ -502,9 +502,9 @@
         {
 //            getLogger().debug( "Allowing project-build to proceed for: " + projectDescriptor );
 
-            //Model model = readModel( "unknown", projectDescriptor, STRICT_MODEL_PARSING );
+            //Model model = readModelFromLocalPath( "unknown", projectDescriptor, STRICT_MODEL_PARSING );
 
-            Model model = readModel( "unknown", projectDescriptor, new PomArtifactResolver(config.getLocalRepository(),
+            Model model = readModelFromLocalPath( "unknown", projectDescriptor, new PomArtifactResolver(config.getLocalRepository(),
                     buildArtifactRepositories( getSuperModel() ), artifactResolver) );
 
 
@@ -560,7 +560,7 @@
             artifactResolver.resolve( projectArtifact, remoteArtifactRepositories, localRepository );
 
             File file = projectArtifact.getFile();
-            model = readModel( projectId, file, new PomArtifactResolver(localRepository, remoteArtifactRepositories, artifactResolver) );
+            model = readModelFromRepository( projectId, file, new PomArtifactResolver(localRepository, remoteArtifactRepositories, artifactResolver) );
 
             String downloadUrl = null;
 
@@ -1003,7 +1003,7 @@
 
         // We will return a different project object using the new model (hence the need to return a project, not just modify the parameter)
         project = new MavenProject( model );
-
+                               
         project.setOriginalModel( originalModel );
 
         project.setActiveProfiles( activeProfiles );
@@ -2045,17 +2045,33 @@
     }
 
 
-    private boolean isOldProjectBuilder = false;
+    private Model readModelFromLocalPath( String projectId,
+                            File projectDescriptor,
+                            PomArtifactResolver resolver )
+       throws ProjectBuildingException
+   {
+       if(projectDescriptor == null) {
+           throw new IllegalArgumentException("projectDescriptor: null, Project Id =" + projectId);
+       }
 
-    protected void setOldProjectBuilder() {
-        isOldProjectBuilder = true;
-    }
+       if(projectBuilder == null) {
+           throw new IllegalArgumentException("projectBuilder: not initialized");
+       }
+       
+       MavenProject mavenProject;
+       try {
+           mavenProject = projectBuilder.buildFromLocalPath(new FileInputStream(projectDescriptor), null, resolver,
+                   projectDescriptor.getParentFile());
+       } catch (IOException e) {
+           e.printStackTrace();
+           throw new ProjectBuildingException(projectId, "File = " + projectDescriptor.getAbsolutePath() , e);
+       }
 
-    protected void setNewProjectBuilder() {
-        isOldProjectBuilder = false;
-    }
+      return mavenProject.getModel();
+
+   }
 
-    private Model readModel( String projectId,
+    private Model readModelFromRepository( String projectId,
                             File projectDescriptor,
                             PomArtifactResolver resolver )
        throws ProjectBuildingException
@@ -2067,11 +2083,11 @@
        if(projectBuilder == null) {
            throw new IllegalArgumentException("projectBuilder: not initialized");
        }
-       
+
        MavenProject mavenProject;
        try {
-           mavenProject = projectBuilder.buildFromStream(new FileInputStream(projectDescriptor), null, resolver,
-                   projectDescriptor.getParentFile());
+           mavenProject = projectBuilder.buildFromRepository(new FileInputStream(projectDescriptor), null, resolver
+           );
        } catch (IOException e) {
            e.printStackTrace();
            throw new ProjectBuildingException(projectId, "File = " + projectDescriptor.getAbsolutePath() , e);

Modified: maven/sandbox/branches/SI_MAVEN_2_1/maven-project/src/main/java/org/apache/maven/project/builder/ProjectBuilder.java
URL: http://svn.apache.org/viewvc/maven/sandbox/branches/SI_MAVEN_2_1/maven-project/src/main/java/org/apache/maven/project/builder/ProjectBuilder.java?rev=677074&r1=677073&r2=677074&view=diff
==============================================================================
--- maven/sandbox/branches/SI_MAVEN_2_1/maven-project/src/main/java/org/apache/maven/project/builder/ProjectBuilder.java (original)
+++ maven/sandbox/branches/SI_MAVEN_2_1/maven-project/src/main/java/org/apache/maven/project/builder/ProjectBuilder.java Tue Jul 15 15:39:03 2008
@@ -13,11 +13,12 @@
 
     String ROLE = ProjectBuilder.class.getName();
 
-    MavenProject buildFromArtifact(Artifact artifact, Collection<InterpolatorProperty> interpolatorProperties,
-                                   PomArtifactResolver resolver)
+    MavenProject buildFromLocalPath(InputStream pom, Collection<InterpolatorProperty> interpolatorProperties,
+                                 PomArtifactResolver resolver, File baseDirectory)
             throws IOException;
 
-    MavenProject buildFromStream(InputStream pom, Collection<InterpolatorProperty> interpolatorProperties,
-                                 PomArtifactResolver resolver, File projectDirectory)
+    MavenProject buildFromRepository(InputStream pom, Collection<InterpolatorProperty> interpolatorProperties,
+                                     PomArtifactResolver resolver)
             throws IOException;
+
 }

Modified: maven/sandbox/branches/SI_MAVEN_2_1/maven-project/src/main/java/org/apache/maven/project/builder/impl/DefaultProjectBuilder.java
URL: http://svn.apache.org/viewvc/maven/sandbox/branches/SI_MAVEN_2_1/maven-project/src/main/java/org/apache/maven/project/builder/impl/DefaultProjectBuilder.java?rev=677074&r1=677073&r2=677074&view=diff
==============================================================================
--- maven/sandbox/branches/SI_MAVEN_2_1/maven-project/src/main/java/org/apache/maven/project/builder/impl/DefaultProjectBuilder.java (original)
+++ maven/sandbox/branches/SI_MAVEN_2_1/maven-project/src/main/java/org/apache/maven/project/builder/impl/DefaultProjectBuilder.java Tue Jul 15 15:39:03 2008
@@ -41,16 +41,40 @@
         this.artifactFactory = artifactFactory;
     }
 
-    public MavenProject buildFromArtifact(Artifact artifact, Collection<InterpolatorProperty> interpolatorProperties, PomArtifactResolver resolver)
+    public MavenProject buildFromRepository(InputStream pom, Collection<InterpolatorProperty> interpolatorProperties,
+                                            PomArtifactResolver resolver)
             throws IOException {
+
+        if (pom == null) {
+            throw new IllegalArgumentException("pom: null");
+        }
+
         if (resolver == null) {
             throw new IllegalArgumentException("resolver: null");
         }
-        resolver.resolve(artifact);
-        return buildFromStream(new FileInputStream(artifact.getFile()), interpolatorProperties, resolver, null);//TODO: Fix
+
+        List<InterpolatorProperty> properties;
+        if (interpolatorProperties == null) {
+            properties = new ArrayList<InterpolatorProperty>();
+        } else {
+            properties = new ArrayList<InterpolatorProperty>(interpolatorProperties);
+        }
+
+        DomainModel domainModel = new PomClassicDomainModel(pom);
+        List<DomainModel> domainModels = new ArrayList<DomainModel>();
+        domainModels.add(domainModel);
+        domainModels.addAll(getDomainModelParentsFromRepository((PomClassicDomainModel) domainModel, resolver));
+
+        PomClassicTransformer transformer = new PomClassicTransformer();
+        ModelTransformerContext ctx = new ModelTransformerContext(
+                Arrays.asList(new ArtifactModelContainerFactory(), new IdModelContainerFactory()));
+        Model model = ((PomClassicDomainModel) ctx.transform(domainModels, transformer,
+                transformer, properties)).getModel();
+                System.out.println("*:" + new PomClassicDomainModel(model).asString());
+        return new MavenProject(model);
     }
 
-    public MavenProject buildFromStream(InputStream pom, Collection<InterpolatorProperty> interpolatorProperties,
+    public MavenProject buildFromLocalPath(InputStream pom, Collection<InterpolatorProperty> interpolatorProperties,
                                         PomArtifactResolver resolver, File projectDirectory)
             throws IOException {
 
@@ -73,41 +97,43 @@
             properties = new ArrayList<InterpolatorProperty>(interpolatorProperties);
         }
 
-        DomainModel domainModel = new PomClassicDomainModel(pom);
+        PomClassicDomainModel domainModel = new PomClassicDomainModel(pom);
         List<DomainModel> domainModels = new ArrayList<DomainModel>();
         domainModels.add(domainModel);
-        domainModels.addAll(getDomainModelParentsFromRepository((PomClassicDomainModel) domainModel, resolver, projectDirectory));
+        if(domainModel.getModel().getParent() != null) {
+            if(isParentLocal(domainModel.getModel().getParent(), projectDirectory )) {
+                 domainModels.addAll(getDomainModelParentsFromLocalPath(domainModel, resolver,
+                         projectDirectory));
+            }  else {
+                domainModels.addAll(getDomainModelParentsFromRepository(domainModel, resolver));
+            }
+        }
 
         PomClassicTransformer transformer = new PomClassicTransformer();
         ModelTransformerContext ctx = new ModelTransformerContext(
                 Arrays.asList(new ArtifactModelContainerFactory(), new IdModelContainerFactory()));
         Model model = ((PomClassicDomainModel) ctx.transform(domainModels, transformer,
                 transformer, properties)).getModel();
+        System.out.println(new PomClassicDomainModel(model).asString());
+        return new MavenProject(model);
+    }
 
-        //  validateModel(model);
-        for (DomainModel dm : domainModels) {
-            //     System.out.println(dm.getEventHistory());
-        }
-        MavenProject mavenProject = new MavenProject(model);
-        Artifact artifact = artifactFactory.createProjectArtifact(model.getGroupId(), model.getArtifactId(),
-                model.getVersion());
-        if (mavenProject.getBuild() != null && mavenProject.getBuild().getOutputDirectory() != null
-                && mavenProject.getBuild().getFinalName() != null) {
-            File artifactFile = new File(mavenProject.getBuild().getDirectory(), mavenProject.getBuild().getFinalName()
-                    + "." + mavenProject.getPackaging());//TODO: fix extension
-            if (!artifactFile.exists()) {
-                throw new IOException("Artifact does not exist: File = " + artifactFile.getAbsolutePath());
+    private boolean isParentLocal(Parent parent, File projectDirectory){
+        try {
+            File f = new File(projectDirectory, parent.getRelativePath()).getCanonicalFile();
+            if (f.isDirectory()) {
+                f = new File(f, "pom.xml");
             }
-            artifact.setFile(artifactFile);
+          //  logger.info("File: " + f.getAbsolutePath());
+            return f.exists();
+        } catch (IOException e) {
+            e.printStackTrace();
+            return false;
         }
-
-        mavenProject.setArtifact(artifact);
-
-        return mavenProject;
     }
 
     private List<DomainModel> getDomainModelParentsFromRepository(PomClassicDomainModel domainModel,
-                                                                  PomArtifactResolver artifactResolver, File projectDirectory) throws IOException {
+                                                                  PomArtifactResolver artifactResolver) throws IOException {
         if (artifactFactory == null) {
             throw new IllegalArgumentException("artifactFactory: not initialized");
         }
@@ -122,37 +148,74 @@
 
         Artifact artifactParent =
                 artifactFactory.createParentArtifact(parent.getGroupId(), parent.getArtifactId(), parent.getVersion());
+        artifactResolver.resolve(artifactParent);
 
-        Model model = domainModel.getModel();
+        PomClassicDomainModel parentDomainModel = new PomClassicDomainModel(new FileInputStream(artifactParent.getFile()));
+        if (!parentDomainModel.matchesParent(domainModel.getModel().getParent())) {
+            logger.warn("Parent pom ids do not match: File = " + artifactParent.getFile().getAbsolutePath());
+        }
 
-        File parentFile = new File(projectDirectory, model.getParent().getRelativePath()).getCanonicalFile();
-        if (parentFile.isDirectory()) {
-            parentFile = new File(parentFile, "pom.xml");
+        domainModels.add(parentDomainModel);
+        domainModels.addAll(getDomainModelParentsFromRepository(parentDomainModel, artifactResolver));
+        return domainModels;
+    }
+
+
+    private List<DomainModel> getDomainModelParentsFromLocalPath(PomClassicDomainModel domainModel,
+                                                                  PomArtifactResolver artifactResolver,
+                                                                  File projectDirectory)
+            throws IOException {
+        
+        if (artifactFactory == null) {
+            throw new IllegalArgumentException("artifactFactory: not initialized");
         }
 
-        //logger.info("Project Directory = " + projectDirectory.getAbsolutePath()) ;
-        //logger.info("Relative PATH = " + model.getParent().getRelativePath());
-        //logger.info("File:" + new File(projectDirectory, model.getParent().getRelativePath()).getAbsolutePath());
-        //logger.info("Canonical Parent File: = " + parentFile.getAbsolutePath());
-        artifactParent.setFile(parentFile);
-        if (!parentFile.exists()) {
-            logger.info("Parent pom does not exist on local path: File = " + parentFile.getAbsolutePath());
-            artifactResolver.resolve(artifactParent);
-//                  throw new IOException("Parent pom does not exist: File = " + artifactParent.getFile() + ", Child Id = " +
-            //                         model.getGroupId() + ":" + model.getArtifactId() + ":" + model.getVersion());
+        List<DomainModel> domainModels = new ArrayList<DomainModel>();
+
+        Parent parent = domainModel.getModel().getParent();
+
+        if (parent == null) {
+            return domainModels;
         }
 
+        Model model = domainModel.getModel();
+        /*
+        logger.info("-----------------");
+        logger.info("Project Directory =" + projectDirectory.getAbsolutePath());
+        logger.info("Parent Path = " + model.getParent().getRelativePath());
+        logger.info("Relative Path = " + new File(projectDirectory, model.getParent().getRelativePath()));
+        */
+        File parentFile = new File(projectDirectory, model.getParent().getRelativePath()).getCanonicalFile();
+        //logger.info("Parent File = " + parentFile.getAbsolutePath());
+        if (parentFile.isDirectory()) {
+          //  logger.info("Is directory = " + parentFile.getAbsolutePath());
+            parentFile = new File(parentFile.getAbsolutePath(), "pom.xml");
+            //logger.info("New Directory = " + parentFile.getAbsolutePath());
+        }
 
-        PomClassicDomainModel parentDomainModel = new PomClassicDomainModel(new FileInputStream(artifactParent.getFile()));
+        if(!parentFile.exists()) {
+            throw new IOException("File does not exist: File =" + parentFile.getAbsolutePath());
+        }
+        
+        PomClassicDomainModel parentDomainModel = new PomClassicDomainModel(new FileInputStream(parentFile));
         if (!parentDomainModel.matchesParent(domainModel.getModel().getParent())) {
-            logger.warn("Parent pom ids do not match: File = " + artifactParent.getFile().getAbsolutePath());
+            logger.warn("Parent pom ids do not match: File = " + parentFile.getAbsolutePath());
         }
 
         domainModels.add(parentDomainModel);
-        domainModels.addAll(getDomainModelParentsFromRepository(parentDomainModel, artifactResolver, artifactParent.getFile().getParentFile()));
+        if(parentDomainModel.getModel().getParent() != null) {
+            if(isParentLocal( parentDomainModel.getModel().getParent(), parentFile.getParentFile() )) {
+              //  logger.info("Parent Local: " + parentFile.getParentFile());
+                 domainModels.addAll(getDomainModelParentsFromLocalPath(parentDomainModel, artifactResolver, parentFile.getParentFile()));
+            }  else {
+                //logger.info("Parent Repo: ");
+                domainModels.addAll(getDomainModelParentsFromRepository(parentDomainModel, artifactResolver));
+            }
+        }
         return domainModels;
     }
 
+
     public void enableLogging(Logger logger) {
         this.logger = logger;
     }
@@ -165,4 +228,6 @@
             throw new IOException("Failed to validate: " + validationResult.toString());
         }
     }
+
+
 }

Modified: maven/sandbox/branches/SI_MAVEN_2_1/maven-project/src/test/java/org/apache/maven/project/AbstractMavenProjectTestCase.java
URL: http://svn.apache.org/viewvc/maven/sandbox/branches/SI_MAVEN_2_1/maven-project/src/test/java/org/apache/maven/project/AbstractMavenProjectTestCase.java?rev=677074&r1=677073&r2=677074&view=diff
==============================================================================
--- maven/sandbox/branches/SI_MAVEN_2_1/maven-project/src/test/java/org/apache/maven/project/AbstractMavenProjectTestCase.java (original)
+++ maven/sandbox/branches/SI_MAVEN_2_1/maven-project/src/test/java/org/apache/maven/project/AbstractMavenProjectTestCase.java Tue Jul 15 15:39:03 2008
@@ -139,15 +139,4 @@
         return projectBuilder.build( pom, getLocalRepository(), new DefaultProfileManager( getContainer(), ctx ) );
     }
 
-    protected MavenProject getProjectOld( File pom)
-        throws Exception
-    {
-        Properties props = System.getProperties();
-        ProfileActivationContext ctx = new DefaultProfileActivationContext( props, false );
-
-        ((DefaultMavenProjectBuilder) projectBuilder).setOldProjectBuilder();
-
-
-        return projectBuilder.build( pom, getLocalRepository(), new DefaultProfileManager( getContainer(), ctx ) );
-    }
 }