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:30 UTC
[maven] 01/01: [MNG-6638] - Prevent reparsing POMs in
MavenMetadataSource
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 )
{