Skip to content

Commit 2ef02ce

Browse files
authored
[MSHARED-1158] make DependencyCollectorBuilder nore configurable (#28)
* [SHARED-1158] DependencyCollectorBuilder should be more configurable Signed-off-by: Olivier Lamy <olamy@apache.org>
1 parent fa81a70 commit 2ef02ce

File tree

3 files changed

+190
-25
lines changed

3 files changed

+190
-25
lines changed

src/main/java/org/apache/maven/shared/dependency/graph/DependencyCollectorBuilder.java

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,22 @@ public interface DependencyCollectorBuilder
4141
* @return the raw dependency tree
4242
* @throws DependencyCollectorBuilderException if some of the dependencies could not be collected.
4343
*/
44-
DependencyNode collectDependencyGraph( ProjectBuildingRequest buildingRequest, ArtifactFilter filter )
45-
throws DependencyCollectorBuilderException;
44+
default DependencyNode collectDependencyGraph( ProjectBuildingRequest buildingRequest, ArtifactFilter filter )
45+
throws DependencyCollectorBuilderException
46+
{
47+
return collectDependencyGraph( new DependencyCollectorRequest( buildingRequest, filter ) );
48+
}
49+
50+
/**
51+
* collect the project's raw dependency graph, with information to allow the API client to reason on its own about
52+
* dependencies.
53+
*
54+
* @param dependencyCollectorRequest the request with different paramaters.
55+
* @return the raw dependency tree
56+
* @throws DependencyCollectorBuilderException if some of the dependencies could not be collected.
57+
* @since 3.2.1
58+
*/
59+
DependencyNode collectDependencyGraph( DependencyCollectorRequest dependencyCollectorRequest )
60+
throws DependencyCollectorBuilderException;
4661

4762
}
Lines changed: 162 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,162 @@
1+
package org.apache.maven.shared.dependency.graph;
2+
3+
/*
4+
* Licensed to the Apache Software Foundation (ASF) under one
5+
* or more contributor license agreements. See the NOTICE file
6+
* distributed with this work for additional information
7+
* regarding copyright ownership. The ASF licenses this file
8+
* to you under the Apache License, Version 2.0 (the
9+
* "License"); you may not use this file except in compliance
10+
* with the License. You may obtain a copy of the License at
11+
*
12+
* http://www.apache.org/licenses/LICENSE-2.0
13+
*
14+
* Unless required by applicable law or agreed to in writing,
15+
* software distributed under the License is distributed on an
16+
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17+
* KIND, either express or implied. See the License for the
18+
* specific language governing permissions and limitations
19+
* under the License.
20+
*/
21+
22+
import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
23+
import org.apache.maven.project.ProjectBuildingRequest;
24+
import org.apache.maven.shared.dependency.graph.internal.DirectScopeDependencySelector;
25+
import org.apache.maven.shared.dependency.graph.internal.VerboseJavaScopeSelector;
26+
import org.eclipse.aether.collection.DependencyGraphTransformer;
27+
import org.eclipse.aether.collection.DependencySelector;
28+
import org.eclipse.aether.util.artifact.JavaScopes;
29+
import org.eclipse.aether.util.graph.manager.DependencyManagerUtils;
30+
import org.eclipse.aether.util.graph.selector.AndDependencySelector;
31+
import org.eclipse.aether.util.graph.selector.ExclusionDependencySelector;
32+
import org.eclipse.aether.util.graph.selector.OptionalDependencySelector;
33+
import org.eclipse.aether.util.graph.transformer.ConflictResolver;
34+
import org.eclipse.aether.util.graph.transformer.JavaScopeDeriver;
35+
import org.eclipse.aether.util.graph.transformer.NearestVersionSelector;
36+
import org.eclipse.aether.util.graph.transformer.SimpleOptionalitySelector;
37+
38+
import java.util.HashMap;
39+
import java.util.Map;
40+
import java.util.Objects;
41+
42+
/**
43+
* <div>
44+
* This class will carry various options used by
45+
* {@link DependencyCollectorBuilder#collectDependencyGraph(DependencyCollectorRequest)}
46+
* </div>
47+
* <div>
48+
* There is a set of default values such:
49+
* </div>
50+
* <div>
51+
* DependencySelector
52+
* <pre>
53+
* new AndDependencySelector(
54+
* new DirectScopeDependencySelector( JavaScopes.TEST ),
55+
* new DirectScopeDependencySelector( JavaScopes.PROVIDED ),
56+
* new OptionalDependencySelector(),
57+
* new ExclusionDependencySelector() );
58+
* </pre>
59+
* </div>
60+
* <div>
61+
* DependencyGraphTransformer
62+
* <pre>
63+
* new ConflictResolver(
64+
* new NearestVersionSelector(),
65+
* new VerboseJavaScopeSelector(),
66+
* new SimpleOptionalitySelector(),
67+
* new JavaScopeDeriver() );
68+
* </pre>
69+
* </div>
70+
* <div>
71+
* configProperties have 2 default values
72+
* <pre>
73+
* ConflictResolver.CONFIG_PROP_VERBOSE, true
74+
* DependencyManagerUtils.CONFIG_PROP_VERBOSE, true
75+
* </pre>
76+
* <a href="https://maven.apache.org/resolver/configuration.html">Move Resolver configuration properties</a>.
77+
* </div>
78+
* @since 3.2.1
79+
*/
80+
public class DependencyCollectorRequest
81+
{
82+
83+
private final ProjectBuildingRequest buildingRequest;
84+
85+
private ArtifactFilter filter;
86+
87+
private Map<String, Object> configProperties = new HashMap<>();
88+
89+
private DependencySelector dependencySelector = new AndDependencySelector(
90+
new DirectScopeDependencySelector( JavaScopes.TEST ),
91+
new DirectScopeDependencySelector( JavaScopes.PROVIDED ),
92+
new OptionalDependencySelector(),
93+
new ExclusionDependencySelector() );
94+
95+
private DependencyGraphTransformer dependencyGraphTransformer = new ConflictResolver(
96+
new NearestVersionSelector(),
97+
new VerboseJavaScopeSelector(),
98+
new SimpleOptionalitySelector(),
99+
new JavaScopeDeriver() );
100+
101+
public DependencyCollectorRequest( ProjectBuildingRequest buildingRequest )
102+
{
103+
this( buildingRequest, null );
104+
}
105+
106+
public DependencyCollectorRequest( ProjectBuildingRequest buildingRequest, ArtifactFilter filter )
107+
{
108+
Objects.requireNonNull( buildingRequest, "ProjectBuildingRequest cannot be null" );
109+
this.buildingRequest = buildingRequest;
110+
this.filter = filter;
111+
configProperties.put( ConflictResolver.CONFIG_PROP_VERBOSE, true );
112+
configProperties.put( DependencyManagerUtils.CONFIG_PROP_VERBOSE, true );
113+
}
114+
115+
public ProjectBuildingRequest getBuildingRequest()
116+
{
117+
return buildingRequest;
118+
}
119+
120+
public ArtifactFilter getFilter()
121+
{
122+
return filter;
123+
}
124+
125+
public DependencySelector getDependencySelector()
126+
{
127+
return dependencySelector;
128+
}
129+
130+
public DependencyCollectorRequest dependencySelector( DependencySelector dependencySelector )
131+
{
132+
this.dependencySelector = dependencySelector;
133+
return this;
134+
}
135+
136+
public DependencyGraphTransformer getDependencyGraphTransformer()
137+
{
138+
return dependencyGraphTransformer;
139+
}
140+
141+
public DependencyCollectorRequest dependencyGraphTransformer(
142+
DependencyGraphTransformer dependencyGraphTransformer )
143+
{
144+
this.dependencyGraphTransformer = dependencyGraphTransformer;
145+
return this;
146+
}
147+
148+
public Map<String, Object> getConfigProperties()
149+
{
150+
return this.configProperties;
151+
}
152+
153+
public void addConfigProperty( String key, Object value )
154+
{
155+
this.configProperties.put( key, value );
156+
}
157+
158+
public void removeConfigProperty( String key )
159+
{
160+
this.configProperties.remove( key );
161+
}
162+
}

src/main/java/org/apache/maven/shared/dependency/graph/internal/DefaultDependencyCollectorBuilder.java

Lines changed: 11 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import java.util.ArrayList;
2323
import java.util.Collections;
2424
import java.util.List;
25+
import java.util.Map;
2526

2627
import javax.inject.Inject;
2728
import javax.inject.Named;
@@ -35,6 +36,7 @@
3536
import org.apache.maven.project.ProjectBuildingRequest;
3637
import org.apache.maven.shared.dependency.graph.DependencyCollectorBuilder;
3738
import org.apache.maven.shared.dependency.graph.DependencyCollectorBuilderException;
39+
import org.apache.maven.shared.dependency.graph.DependencyCollectorRequest;
3840
import org.apache.maven.shared.dependency.graph.DependencyNode;
3941
import org.eclipse.aether.DefaultRepositorySystemSession;
4042
import org.eclipse.aether.RepositorySystem;
@@ -43,19 +45,10 @@
4345
import org.eclipse.aether.collection.CollectRequest;
4446
import org.eclipse.aether.collection.CollectResult;
4547
import org.eclipse.aether.collection.DependencyCollectionException;
46-
import org.eclipse.aether.collection.DependencyGraphTransformer;
47-
import org.eclipse.aether.collection.DependencySelector;
4848
import org.eclipse.aether.graph.DependencyVisitor;
4949
import org.eclipse.aether.graph.Exclusion;
50-
import org.eclipse.aether.util.artifact.JavaScopes;
5150
import org.eclipse.aether.util.graph.manager.DependencyManagerUtils;
52-
import org.eclipse.aether.util.graph.selector.AndDependencySelector;
53-
import org.eclipse.aether.util.graph.selector.ExclusionDependencySelector;
54-
import org.eclipse.aether.util.graph.selector.OptionalDependencySelector;
5551
import org.eclipse.aether.util.graph.transformer.ConflictResolver;
56-
import org.eclipse.aether.util.graph.transformer.JavaScopeDeriver;
57-
import org.eclipse.aether.util.graph.transformer.NearestVersionSelector;
58-
import org.eclipse.aether.util.graph.transformer.SimpleOptionalitySelector;
5952
import org.eclipse.aether.util.graph.visitor.TreeDependencyVisitor;
6053
import org.eclipse.aether.version.VersionConstraint;
6154
import org.slf4j.Logger;
@@ -82,12 +75,13 @@ public DefaultDependencyCollectorBuilder( RepositorySystem repositorySystem )
8275
}
8376

8477
@Override
85-
public DependencyNode collectDependencyGraph( ProjectBuildingRequest buildingRequest, ArtifactFilter filter )
78+
public DependencyNode collectDependencyGraph( DependencyCollectorRequest dependencyCollectorRequest )
8679
throws DependencyCollectorBuilderException
8780
{
8881
DefaultRepositorySystemSession session = null;
8982
try
9083
{
84+
ProjectBuildingRequest buildingRequest = dependencyCollectorRequest.getBuildingRequest();
9185
MavenProject project = buildingRequest.getProject();
9286

9387
Artifact projectArtifact = project.getArtifact();
@@ -97,20 +91,14 @@ public DependencyNode collectDependencyGraph( ProjectBuildingRequest buildingReq
9791

9892
session = new DefaultRepositorySystemSession( repositorySession );
9993

100-
DependencyGraphTransformer transformer =
101-
new ConflictResolver( new NearestVersionSelector(), new VerboseJavaScopeSelector(),
102-
new SimpleOptionalitySelector(), new JavaScopeDeriver() );
103-
session.setDependencyGraphTransformer( transformer );
94+
session.setDependencyGraphTransformer( dependencyCollectorRequest.getDependencyGraphTransformer() );
10495

105-
DependencySelector depFilter =
106-
new AndDependencySelector( new DirectScopeDependencySelector( JavaScopes.TEST ),
107-
new DirectScopeDependencySelector( JavaScopes.PROVIDED ),
108-
new OptionalDependencySelector(),
109-
new ExclusionDependencySelector() );
110-
session.setDependencySelector( depFilter );
96+
session.setDependencySelector( dependencyCollectorRequest.getDependencySelector() );
11197

112-
session.setConfigProperty( ConflictResolver.CONFIG_PROP_VERBOSE, true );
113-
session.setConfigProperty( DependencyManagerUtils.CONFIG_PROP_VERBOSE, true );
98+
for ( Map.Entry<String, Object> entry : dependencyCollectorRequest.getConfigProperties().entrySet() )
99+
{
100+
session.setConfigProperty( entry.getKey(), entry.getValue() );
101+
}
114102

115103
org.eclipse.aether.artifact.Artifact aetherArtifact = RepositoryUtils.toArtifact( projectArtifact );
116104

@@ -134,7 +122,7 @@ public DependencyNode collectDependencyGraph( ProjectBuildingRequest buildingReq
134122
logTree( rootNode );
135123
}
136124

137-
return buildDependencyNode( null, rootNode, projectArtifact, filter );
125+
return buildDependencyNode( null, rootNode, projectArtifact, dependencyCollectorRequest.getFilter() );
138126
}
139127
catch ( DependencyCollectionException e )
140128
{

0 commit comments

Comments
 (0)