diff --git a/pom.xml b/pom.xml index 2767518..a590078 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ io.airlift.resolver resolver-root - 1.7.1-wxd + 1.7.4-wxd pom Resolve the dependencies of Maven coordinates or POM file diff --git a/resolver-integration/pom.xml b/resolver-integration/pom.xml index a1ef3b9..3d35ccf 100644 --- a/resolver-integration/pom.xml +++ b/resolver-integration/pom.xml @@ -4,7 +4,7 @@ io.airlift.resolver resolver-root - 1.7.1-wxd + 1.7.4-wxd io.airlift.resolver diff --git a/resolver/pom.xml b/resolver/pom.xml index 9d201d0..9cc5773 100644 --- a/resolver/pom.xml +++ b/resolver/pom.xml @@ -4,7 +4,7 @@ io.airlift.resolver resolver-root - 1.7.1-wxd + 1.7.4-wxd io.airlift.resolver diff --git a/resolver/src/main/java/io/airlift/resolver/ArtifactResolver.java b/resolver/src/main/java/io/airlift/resolver/ArtifactResolver.java index 4ec33a2..3161374 100644 --- a/resolver/src/main/java/io/airlift/resolver/ArtifactResolver.java +++ b/resolver/src/main/java/io/airlift/resolver/ArtifactResolver.java @@ -47,7 +47,6 @@ import org.eclipse.aether.graph.Dependency; import org.eclipse.aether.graph.Exclusion; import org.eclipse.aether.impl.ArtifactDescriptorReader; -import org.eclipse.aether.impl.DefaultServiceLocator; import org.eclipse.aether.impl.MetadataGeneratorFactory; import org.eclipse.aether.impl.ResolverArtifactResolver; import org.eclipse.aether.impl.VersionRangeResolver; @@ -95,6 +94,10 @@ public class ArtifactResolver private final DefaultRepositorySystemSession repositorySystemSession; private final List repositories; + private ProjectBuilder projectBuilder; + + private ProjectBuildingRequest builderRequest; + public ArtifactResolver(String localRepositoryDir, String... remoteRepositoryUris) { this(localRepositoryDir, Arrays.asList(remoteRepositoryUris)); @@ -122,6 +125,9 @@ public ArtifactResolver(String localRepositoryDir, List remoteRepository repositorySystemSession.setTransferListener(new ConsoleTransferListener()); repositorySystemSession.setRepositoryListener(new ConsoleRepositoryListener()); + // Recreating ProjectBuilder & ProjectBuilderRequest caused major slowdowns + buildProjectBuilder(); + List repositories = new ArrayList<>(remoteRepositoryUris.size()); int index = 0; for (String repositoryUri : remoteRepositoryUris) { @@ -205,9 +211,8 @@ public List resolvePom(File pomFile) .collect(toImmutableList()); } - private MavenProject getMavenProject(File pomFile) + private void buildProjectBuilder() { - // TODO: move off deprecated org.apache.maven.repository.RepositorySystem (impl is in maven2 compat module) try { PlexusContainer container = container(); org.apache.maven.repository.RepositorySystem lrs = container.lookup(org.apache.maven.repository.RepositorySystem.class); @@ -218,7 +223,21 @@ private MavenProject getMavenProject(File pomFile) request.setProcessPlugins(false); request.setLocalRepository(lrs.createDefaultLocalRepository()); request.setRemoteRepositories(Arrays.asList(new ArtifactRepository[] {lrs.createDefaultRemoteRepository()}.clone())); - ProjectBuildingResult result = projectBuilder.build(pomFile, request); + this.projectBuilder = projectBuilder; + this.builderRequest = request; + }catch (Exception e) { + throw new RuntimeException("Error initializing project builder: ", e); + } + } + private MavenProject getMavenProject(File pomFile) + { + // TODO: move off deprecated org.apache.maven.repository.RepositorySystem (impl is in maven2 compat module) + try { + if (projectBuilder == null || builderRequest == null) + { + buildProjectBuilder(); + } + ProjectBuildingResult result = projectBuilder.build(pomFile, builderRequest); return result.getProject(); } catch (Exception e) {