You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by sl...@apache.org on 2019/04/14 17:49:29 UTC

[maven] branch MNG-6638 created (now 542a9f9)

This is an automated email from the ASF dual-hosted git repository.

slachiewicz pushed a change to branch MNG-6638
in repository https://gitbox.apache.org/repos/asf/maven.git.


      at 542a9f9  [MNG-6638] - Prevent reparsing POMs in MavenMetadataSource

This branch includes the following new commits:

     new 542a9f9  [MNG-6638] - Prevent reparsing POMs in MavenMetadataSource

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[maven] 01/01: [MNG-6638] - Prevent reparsing POMs in MavenMetadataSource

Posted by sl...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

slachiewicz pushed a commit to branch MNG-6638
in repository https://gitbox.apache.org/repos/asf/maven.git

commit 542a9f950d3111f80f0ba5823bbfe28bb500d85a
Author: Stefan Oehme <st...@gmail.com>
AuthorDate: Sun Apr 14 13:47:05 2019 +0200

    [MNG-6638] - Prevent reparsing POMs in MavenMetadataSource
    
    If a dependency on another project is found, don't parse its
    POM again, but instead use the model we already have in memory.
    
    This saves a large amount of time and memory for builds that have
    lots of subprojects and dependencies between them.
    
    The approach was directly copied from DefaultArtifactDescriptorReader,
    which does the same optimization.
---
 .../project/artifact/MavenMetadataSource.java      | 22 +++++++++++++++++++---
 .../internal/DefaultArtifactDescriptorReader.java  |  1 -
 2 files changed, 19 insertions(+), 4 deletions(-)

diff --git a/maven-core/src/main/java/org/apache/maven/project/artifact/MavenMetadataSource.java b/maven-core/src/main/java/org/apache/maven/project/artifact/MavenMetadataSource.java
index 2dc9372..d89d516 100644
--- a/maven-core/src/main/java/org/apache/maven/project/artifact/MavenMetadataSource.java
+++ b/maven-core/src/main/java/org/apache/maven/project/artifact/MavenMetadataSource.java
@@ -32,6 +32,7 @@ import java.util.Map;
 import java.util.Properties;
 import java.util.Set;
 
+import org.apache.maven.RepositoryUtils;
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.artifact.factory.ArtifactFactory;
 import org.apache.maven.artifact.metadata.ArtifactMetadataRetrievalException;
@@ -56,6 +57,7 @@ import org.apache.maven.model.Dependency;
 import org.apache.maven.model.DependencyManagement;
 import org.apache.maven.model.DistributionManagement;
 import org.apache.maven.model.Exclusion;
+import org.apache.maven.model.Model;
 import org.apache.maven.model.Relocation;
 import org.apache.maven.model.building.ModelBuildingException;
 import org.apache.maven.model.building.ModelBuildingRequest;
@@ -69,6 +71,7 @@ import org.apache.maven.project.ProjectBuildingException;
 import org.apache.maven.project.ProjectBuildingRequest;
 import org.apache.maven.properties.internal.EnvironmentUtils;
 import org.apache.maven.properties.internal.SystemProperties;
+import org.apache.maven.repository.internal.MavenWorkspaceReader;
 import org.apache.maven.repository.legacy.metadata.DefaultMetadataResolutionRequest;
 import org.apache.maven.repository.legacy.metadata.MetadataResolutionRequest;
 import org.codehaus.plexus.PlexusContainer;
@@ -78,6 +81,7 @@ import org.codehaus.plexus.component.repository.exception.ComponentLookupExcepti
 import org.codehaus.plexus.logging.Logger;
 import org.eclipse.aether.RepositorySystemSession;
 import org.eclipse.aether.repository.RepositoryPolicy;
+import org.eclipse.aether.repository.WorkspaceReader;
 import org.eclipse.aether.transfer.ArtifactNotFoundException;
 
 /**
@@ -175,9 +179,21 @@ public class MavenMetadataSource
 
         Artifact relocatedArtifact = null;
 
-        //TODO Not even sure this is really required as the project will be cached in the builder, we'll see this
-        // is currently the biggest hotspot
-        if ( artifact instanceof ArtifactWithDependencies )
+        final WorkspaceReader workspace = legacySupport.getRepositorySession().getWorkspaceReader();
+        Model model = null;
+        if ( workspace instanceof MavenWorkspaceReader )
+        {
+            model = ( (MavenWorkspaceReader) workspace ).findModel( RepositoryUtils.toArtifact( artifact ) );
+        }
+
+        if ( model != null )
+        {
+            pomArtifact = artifact;
+            dependencies = model.getDependencies();
+            DependencyManagement dependencyManagement = model.getDependencyManagement();
+            managedDependencies = dependencyManagement == null ? null : dependencyManagement.getDependencies();
+        }
+        else if ( artifact instanceof ArtifactWithDependencies )
         {
             pomArtifact = artifact;
 
diff --git a/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/DefaultArtifactDescriptorReader.java b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/DefaultArtifactDescriptorReader.java
index 4f464ea..586c83e 100644
--- a/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/DefaultArtifactDescriptorReader.java
+++ b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/DefaultArtifactDescriptorReader.java
@@ -257,7 +257,6 @@ public class DefaultArtifactDescriptorReader
 
             Model model;
 
-            // hack: don't rebuild model if it was already loaded during reactor resolution
             final WorkspaceReader workspace = session.getWorkspaceReader();
             if ( workspace instanceof MavenWorkspaceReader )
             {