You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by ol...@apache.org on 2022/11/11 08:41:03 UTC
[maven-dependency-tree] branch master updated: [MSHARED-1158] make DependencyCollectorBuilder nore configurable (#28)
This is an automated email from the ASF dual-hosted git repository.
olamy pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/maven-dependency-tree.git
The following commit(s) were added to refs/heads/master by this push:
new 2ef02ce [MSHARED-1158] make DependencyCollectorBuilder nore configurable (#28)
2ef02ce is described below
commit 2ef02cecb94fa8b6f17437970040df950da2ba17
Author: Olivier Lamy <ol...@apache.org>
AuthorDate: Fri Nov 11 18:40:58 2022 +1000
[MSHARED-1158] make DependencyCollectorBuilder nore configurable (#28)
* [SHARED-1158] DependencyCollectorBuilder should be more configurable
Signed-off-by: Olivier Lamy <ol...@apache.org>
---
.../graph/DependencyCollectorBuilder.java | 19 ++-
.../graph/DependencyCollectorRequest.java | 162 +++++++++++++++++++++
.../DefaultDependencyCollectorBuilder.java | 34 ++---
3 files changed, 190 insertions(+), 25 deletions(-)
diff --git a/src/main/java/org/apache/maven/shared/dependency/graph/DependencyCollectorBuilder.java b/src/main/java/org/apache/maven/shared/dependency/graph/DependencyCollectorBuilder.java
index 9ece96f..48c0a77 100644
--- a/src/main/java/org/apache/maven/shared/dependency/graph/DependencyCollectorBuilder.java
+++ b/src/main/java/org/apache/maven/shared/dependency/graph/DependencyCollectorBuilder.java
@@ -41,7 +41,22 @@ public interface DependencyCollectorBuilder
* @return the raw dependency tree
* @throws DependencyCollectorBuilderException if some of the dependencies could not be collected.
*/
- DependencyNode collectDependencyGraph( ProjectBuildingRequest buildingRequest, ArtifactFilter filter )
- throws DependencyCollectorBuilderException;
+ default DependencyNode collectDependencyGraph( ProjectBuildingRequest buildingRequest, ArtifactFilter filter )
+ throws DependencyCollectorBuilderException
+ {
+ return collectDependencyGraph( new DependencyCollectorRequest( buildingRequest, filter ) );
+ }
+
+ /**
+ * collect the project's raw dependency graph, with information to allow the API client to reason on its own about
+ * dependencies.
+ *
+ * @param dependencyCollectorRequest the request with different paramaters.
+ * @return the raw dependency tree
+ * @throws DependencyCollectorBuilderException if some of the dependencies could not be collected.
+ * @since 3.2.1
+ */
+ DependencyNode collectDependencyGraph( DependencyCollectorRequest dependencyCollectorRequest )
+ throws DependencyCollectorBuilderException;
}
diff --git a/src/main/java/org/apache/maven/shared/dependency/graph/DependencyCollectorRequest.java b/src/main/java/org/apache/maven/shared/dependency/graph/DependencyCollectorRequest.java
new file mode 100644
index 0000000..450650e
--- /dev/null
+++ b/src/main/java/org/apache/maven/shared/dependency/graph/DependencyCollectorRequest.java
@@ -0,0 +1,162 @@
+package org.apache.maven.shared.dependency.graph;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
+import org.apache.maven.project.ProjectBuildingRequest;
+import org.apache.maven.shared.dependency.graph.internal.DirectScopeDependencySelector;
+import org.apache.maven.shared.dependency.graph.internal.VerboseJavaScopeSelector;
+import org.eclipse.aether.collection.DependencyGraphTransformer;
+import org.eclipse.aether.collection.DependencySelector;
+import org.eclipse.aether.util.artifact.JavaScopes;
+import org.eclipse.aether.util.graph.manager.DependencyManagerUtils;
+import org.eclipse.aether.util.graph.selector.AndDependencySelector;
+import org.eclipse.aether.util.graph.selector.ExclusionDependencySelector;
+import org.eclipse.aether.util.graph.selector.OptionalDependencySelector;
+import org.eclipse.aether.util.graph.transformer.ConflictResolver;
+import org.eclipse.aether.util.graph.transformer.JavaScopeDeriver;
+import org.eclipse.aether.util.graph.transformer.NearestVersionSelector;
+import org.eclipse.aether.util.graph.transformer.SimpleOptionalitySelector;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Objects;
+
+/**
+ * <div>
+ * This class will carry various options used by
+ * {@link DependencyCollectorBuilder#collectDependencyGraph(DependencyCollectorRequest)}
+ * </div>
+ * <div>
+ * There is a set of default values such:
+ * </div>
+ * <div>
+ * DependencySelector
+ * <pre>
+ * new AndDependencySelector(
+ * new DirectScopeDependencySelector( JavaScopes.TEST ),
+ * new DirectScopeDependencySelector( JavaScopes.PROVIDED ),
+ * new OptionalDependencySelector(),
+ * new ExclusionDependencySelector() );
+ * </pre>
+ * </div>
+ * <div>
+ * DependencyGraphTransformer
+ * <pre>
+ * new ConflictResolver(
+ * new NearestVersionSelector(),
+ * new VerboseJavaScopeSelector(),
+ * new SimpleOptionalitySelector(),
+ * new JavaScopeDeriver() );
+ * </pre>
+ * </div>
+ * <div>
+ * configProperties have 2 default values
+ * <pre>
+ * ConflictResolver.CONFIG_PROP_VERBOSE, true
+ * DependencyManagerUtils.CONFIG_PROP_VERBOSE, true
+ * </pre>
+ * <a href="https://maven.apache.org/resolver/configuration.html">Move Resolver configuration properties</a>.
+ * </div>
+ * @since 3.2.1
+ */
+public class DependencyCollectorRequest
+{
+
+ private final ProjectBuildingRequest buildingRequest;
+
+ private ArtifactFilter filter;
+
+ private Map<String, Object> configProperties = new HashMap<>();
+
+ private DependencySelector dependencySelector = new AndDependencySelector(
+ new DirectScopeDependencySelector( JavaScopes.TEST ),
+ new DirectScopeDependencySelector( JavaScopes.PROVIDED ),
+ new OptionalDependencySelector(),
+ new ExclusionDependencySelector() );
+
+ private DependencyGraphTransformer dependencyGraphTransformer = new ConflictResolver(
+ new NearestVersionSelector(),
+ new VerboseJavaScopeSelector(),
+ new SimpleOptionalitySelector(),
+ new JavaScopeDeriver() );
+
+ public DependencyCollectorRequest( ProjectBuildingRequest buildingRequest )
+ {
+ this( buildingRequest, null );
+ }
+
+ public DependencyCollectorRequest( ProjectBuildingRequest buildingRequest, ArtifactFilter filter )
+ {
+ Objects.requireNonNull( buildingRequest, "ProjectBuildingRequest cannot be null" );
+ this.buildingRequest = buildingRequest;
+ this.filter = filter;
+ configProperties.put( ConflictResolver.CONFIG_PROP_VERBOSE, true );
+ configProperties.put( DependencyManagerUtils.CONFIG_PROP_VERBOSE, true );
+ }
+
+ public ProjectBuildingRequest getBuildingRequest()
+ {
+ return buildingRequest;
+ }
+
+ public ArtifactFilter getFilter()
+ {
+ return filter;
+ }
+
+ public DependencySelector getDependencySelector()
+ {
+ return dependencySelector;
+ }
+
+ public DependencyCollectorRequest dependencySelector( DependencySelector dependencySelector )
+ {
+ this.dependencySelector = dependencySelector;
+ return this;
+ }
+
+ public DependencyGraphTransformer getDependencyGraphTransformer()
+ {
+ return dependencyGraphTransformer;
+ }
+
+ public DependencyCollectorRequest dependencyGraphTransformer(
+ DependencyGraphTransformer dependencyGraphTransformer )
+ {
+ this.dependencyGraphTransformer = dependencyGraphTransformer;
+ return this;
+ }
+
+ public Map<String, Object> getConfigProperties()
+ {
+ return this.configProperties;
+ }
+
+ public void addConfigProperty( String key, Object value )
+ {
+ this.configProperties.put( key, value );
+ }
+
+ public void removeConfigProperty( String key )
+ {
+ this.configProperties.remove( key );
+ }
+}
diff --git a/src/main/java/org/apache/maven/shared/dependency/graph/internal/DefaultDependencyCollectorBuilder.java b/src/main/java/org/apache/maven/shared/dependency/graph/internal/DefaultDependencyCollectorBuilder.java
index 5b0218d..b30f782 100644
--- a/src/main/java/org/apache/maven/shared/dependency/graph/internal/DefaultDependencyCollectorBuilder.java
+++ b/src/main/java/org/apache/maven/shared/dependency/graph/internal/DefaultDependencyCollectorBuilder.java
@@ -22,6 +22,7 @@ package org.apache.maven.shared.dependency.graph.internal;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
+import java.util.Map;
import javax.inject.Inject;
import javax.inject.Named;
@@ -35,6 +36,7 @@ import org.apache.maven.project.MavenProject;
import org.apache.maven.project.ProjectBuildingRequest;
import org.apache.maven.shared.dependency.graph.DependencyCollectorBuilder;
import org.apache.maven.shared.dependency.graph.DependencyCollectorBuilderException;
+import org.apache.maven.shared.dependency.graph.DependencyCollectorRequest;
import org.apache.maven.shared.dependency.graph.DependencyNode;
import org.eclipse.aether.DefaultRepositorySystemSession;
import org.eclipse.aether.RepositorySystem;
@@ -43,19 +45,10 @@ import org.eclipse.aether.artifact.ArtifactTypeRegistry;
import org.eclipse.aether.collection.CollectRequest;
import org.eclipse.aether.collection.CollectResult;
import org.eclipse.aether.collection.DependencyCollectionException;
-import org.eclipse.aether.collection.DependencyGraphTransformer;
-import org.eclipse.aether.collection.DependencySelector;
import org.eclipse.aether.graph.DependencyVisitor;
import org.eclipse.aether.graph.Exclusion;
-import org.eclipse.aether.util.artifact.JavaScopes;
import org.eclipse.aether.util.graph.manager.DependencyManagerUtils;
-import org.eclipse.aether.util.graph.selector.AndDependencySelector;
-import org.eclipse.aether.util.graph.selector.ExclusionDependencySelector;
-import org.eclipse.aether.util.graph.selector.OptionalDependencySelector;
import org.eclipse.aether.util.graph.transformer.ConflictResolver;
-import org.eclipse.aether.util.graph.transformer.JavaScopeDeriver;
-import org.eclipse.aether.util.graph.transformer.NearestVersionSelector;
-import org.eclipse.aether.util.graph.transformer.SimpleOptionalitySelector;
import org.eclipse.aether.util.graph.visitor.TreeDependencyVisitor;
import org.eclipse.aether.version.VersionConstraint;
import org.slf4j.Logger;
@@ -82,12 +75,13 @@ public class DefaultDependencyCollectorBuilder
}
@Override
- public DependencyNode collectDependencyGraph( ProjectBuildingRequest buildingRequest, ArtifactFilter filter )
+ public DependencyNode collectDependencyGraph( DependencyCollectorRequest dependencyCollectorRequest )
throws DependencyCollectorBuilderException
{
DefaultRepositorySystemSession session = null;
try
{
+ ProjectBuildingRequest buildingRequest = dependencyCollectorRequest.getBuildingRequest();
MavenProject project = buildingRequest.getProject();
Artifact projectArtifact = project.getArtifact();
@@ -97,20 +91,14 @@ public class DefaultDependencyCollectorBuilder
session = new DefaultRepositorySystemSession( repositorySession );
- DependencyGraphTransformer transformer =
- new ConflictResolver( new NearestVersionSelector(), new VerboseJavaScopeSelector(),
- new SimpleOptionalitySelector(), new JavaScopeDeriver() );
- session.setDependencyGraphTransformer( transformer );
+ session.setDependencyGraphTransformer( dependencyCollectorRequest.getDependencyGraphTransformer() );
- DependencySelector depFilter =
- new AndDependencySelector( new DirectScopeDependencySelector( JavaScopes.TEST ),
- new DirectScopeDependencySelector( JavaScopes.PROVIDED ),
- new OptionalDependencySelector(),
- new ExclusionDependencySelector() );
- session.setDependencySelector( depFilter );
+ session.setDependencySelector( dependencyCollectorRequest.getDependencySelector() );
- session.setConfigProperty( ConflictResolver.CONFIG_PROP_VERBOSE, true );
- session.setConfigProperty( DependencyManagerUtils.CONFIG_PROP_VERBOSE, true );
+ for ( Map.Entry<String, Object> entry : dependencyCollectorRequest.getConfigProperties().entrySet() )
+ {
+ session.setConfigProperty( entry.getKey(), entry.getValue() );
+ }
org.eclipse.aether.artifact.Artifact aetherArtifact = RepositoryUtils.toArtifact( projectArtifact );
@@ -134,7 +122,7 @@ public class DefaultDependencyCollectorBuilder
logTree( rootNode );
}
- return buildDependencyNode( null, rootNode, projectArtifact, filter );
+ return buildDependencyNode( null, rootNode, projectArtifact, dependencyCollectorRequest.getFilter() );
}
catch ( DependencyCollectionException e )
{