You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by cs...@apache.org on 2022/05/24 13:49:53 UTC
[maven-resolver] 01/01: Idea2: collector using RequestTrace
This is an automated email from the ASF dual-hosted git repository.
cstamas pushed a commit to branch tmp-collect-listener-2
in repository https://gitbox.apache.org/repos/asf/maven-resolver.git
commit e7f04befdf2b952c2ae16e2079225429978a3d25
Author: Tamas Cservenak <ta...@cservenak.net>
AuthorDate: Tue May 24 15:49:16 2022 +0200
Idea2: collector using RequestTrace
To pass over contextual information to listeners.
---
.../examples/util/ConsoleRepositoryListener.java | 34 +++++++++++--
.../impl/collect/DependencyCollectorDelegate.java | 12 +++++
.../impl/collect/DependencyCollectorTrace.java | 58 ++++++++++++++++++++++
.../impl/collect/bf/BfDependencyCollector.java | 25 +++++-----
.../impl/collect/df/DfDependencyCollector.java | 46 ++++++++---------
5 files changed, 133 insertions(+), 42 deletions(-)
diff --git a/maven-resolver-demos/maven-resolver-demo-snippets/src/main/java/org/apache/maven/resolver/examples/util/ConsoleRepositoryListener.java b/maven-resolver-demos/maven-resolver-demo-snippets/src/main/java/org/apache/maven/resolver/examples/util/ConsoleRepositoryListener.java
index 2d5fbafe..d864532f 100644
--- a/maven-resolver-demos/maven-resolver-demo-snippets/src/main/java/org/apache/maven/resolver/examples/util/ConsoleRepositoryListener.java
+++ b/maven-resolver-demos/maven-resolver-demo-snippets/src/main/java/org/apache/maven/resolver/examples/util/ConsoleRepositoryListener.java
@@ -8,9 +8,9 @@ package org.apache.maven.resolver.examples.util;
* 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
@@ -23,6 +23,9 @@ import java.io.PrintStream;
import org.eclipse.aether.AbstractRepositoryListener;
import org.eclipse.aether.RepositoryEvent;
+import org.eclipse.aether.RequestTrace;
+import org.eclipse.aether.graph.DependencyNode;
+import org.eclipse.aether.internal.impl.collect.DependencyCollectorTrace;
import static java.util.Objects.requireNonNull;
@@ -30,7 +33,7 @@ import static java.util.Objects.requireNonNull;
* A simplistic repository listener that logs events to the console.
*/
public class ConsoleRepositoryListener
- extends AbstractRepositoryListener
+ extends AbstractRepositoryListener
{
private final PrintStream out;
@@ -61,7 +64,7 @@ public class ConsoleRepositoryListener
{
requireNonNull( event, "event cannot be null" );
out.println( "Invalid artifact descriptor for " + event.getArtifact() + ": "
- + event.getException().getMessage() );
+ + event.getException().getMessage() );
}
public void artifactDescriptorMissing( RepositoryEvent event )
@@ -85,6 +88,27 @@ public class ConsoleRepositoryListener
public void artifactResolved( RepositoryEvent event )
{
requireNonNull( event, "event cannot be null" );
+ DependencyCollectorTrace dependencyCollectorTrace = null;
+ RequestTrace trace = event.getTrace();
+ while ( trace != null )
+ {
+ if ( trace.getData() instanceof DependencyCollectorTrace )
+ {
+ dependencyCollectorTrace = (DependencyCollectorTrace) trace.getData();
+ break;
+ }
+ trace = trace.getParent();
+ }
+ if ( dependencyCollectorTrace != null && event.getArtifact().getFile() != null )
+ {
+ StringBuilder stringBuilder = new StringBuilder();
+ for ( DependencyNode dependency : dependencyCollectorTrace.getPath() )
+ {
+ stringBuilder.append( " -> " ).append( dependency.getArtifact() );
+ }
+ stringBuilder.append( " -> " ).append( dependencyCollectorTrace.getNode() );
+ out.println( ">> " + stringBuilder.toString() );
+ }
out.println( "Resolved artifact " + event.getArtifact() + " from " + event.getRepository() );
}
@@ -103,7 +127,7 @@ public class ConsoleRepositoryListener
public void artifactResolving( RepositoryEvent event )
{
requireNonNull( event, "event cannot be null" );
- out.println( "Resolving artifact " + event.getArtifact() );
+ //out.println( "Resolving artifact " + event.getArtifact() );
}
public void metadataDeployed( RepositoryEvent event )
diff --git a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/collect/DependencyCollectorDelegate.java b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/collect/DependencyCollectorDelegate.java
index 14d70c2a..de644e09 100644
--- a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/collect/DependencyCollectorDelegate.java
+++ b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/collect/DependencyCollectorDelegate.java
@@ -294,6 +294,18 @@ public abstract class DependencyCollectorDelegate implements DependencyCollector
return result;
}
+ protected RequestTrace trailTrace( RequestTrace trace, String context, List<DependencyNode> path, Dependency node )
+ {
+ return RequestTrace.newChild(
+ trace,
+ new DependencyCollectorTrace(
+ context,
+ path,
+ node
+ )
+ );
+ }
+
@SuppressWarnings( "checkstyle:parameternumber" )
protected abstract void doCollectDependencies( RepositorySystemSession session, RequestTrace trace, DataPool pool,
DefaultDependencyCollectionContext context,
diff --git a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/collect/DependencyCollectorTrace.java b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/collect/DependencyCollectorTrace.java
new file mode 100644
index 00000000..5042ee6e
--- /dev/null
+++ b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/collect/DependencyCollectorTrace.java
@@ -0,0 +1,58 @@
+package org.eclipse.aether.internal.impl.collect;
+
+/*
+ * 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 java.util.List;
+
+import org.eclipse.aether.graph.Dependency;
+import org.eclipse.aether.graph.DependencyNode;
+
+import static java.util.Objects.requireNonNull;
+
+/**
+ * Trace objects for dependency collection.
+ *
+ * @since 1.8.1
+ */
+public final class DependencyCollectorTrace
+{
+ private final String context;
+
+ private final List<DependencyNode> path;
+
+ private final Dependency node;
+
+ public DependencyCollectorTrace( final String context, final List<DependencyNode> path, final Dependency node )
+ {
+ this.context = context;
+ this.path = requireNonNull( path );
+ this.node = requireNonNull( node );
+ }
+
+ public List<DependencyNode> getPath()
+ {
+ return path;
+ }
+
+ public Dependency getNode()
+ {
+ return node;
+ }
+}
diff --git a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/collect/bf/BfDependencyCollector.java b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/collect/bf/BfDependencyCollector.java
index 8542dc7c..244f95d1 100644
--- a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/collect/bf/BfDependencyCollector.java
+++ b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/collect/bf/BfDependencyCollector.java
@@ -126,7 +126,7 @@ public class BfDependencyCollector
}
Args args =
- new Args( session, trace, pool, context, versionContext, request,
+ new Args( session, pool, context, versionContext, request,
useSkip ? DependencyResolutionSkipper.defaultSkipper()
: DependencyResolutionSkipper.neverSkipper() );
@@ -150,7 +150,7 @@ public class BfDependencyCollector
while ( !args.dependencyProcessingQueue.isEmpty() )
{
- processDependency( args, results, args.dependencyProcessingQueue.remove(), Collections.emptyList(),
+ processDependency( args, trace, results, args.dependencyProcessingQueue.remove(), Collections.emptyList(),
false );
}
@@ -158,15 +158,17 @@ public class BfDependencyCollector
}
@SuppressWarnings( "checkstyle:parameternumber" )
- private void processDependency( Args args, Results results, DependencyProcessingContext context,
- List<Artifact> relocations, boolean disableVersionManagement )
+ private void processDependency( Args args, RequestTrace parent, Results results,
+ DependencyProcessingContext context, List<Artifact> relocations,
+ boolean disableVersionManagement )
{
-
if ( context.depSelector != null && !context.depSelector.selectDependency( context.dependency ) )
{
return;
}
+ RequestTrace trace = trailTrace( parent, args.request.getRequestContext(), context.parents,
+ context.dependency );
PremanagedDependency preManaged =
PremanagedDependency.create( context.depManager, context.dependency, disableVersionManagement,
args.premanagedState );
@@ -182,7 +184,7 @@ public class BfDependencyCollector
VersionRangeResult rangeResult;
try
{
- VersionRangeRequest rangeRequest = createVersionRangeRequest( args.request.getRequestContext(), args.trace,
+ VersionRangeRequest rangeRequest = createVersionRangeRequest( args.request.getRequestContext(), trace,
context.repositories, dependency );
rangeResult = cachedResolveRangeResult( rangeRequest, args.pool, args.session );
@@ -203,7 +205,7 @@ public class BfDependencyCollector
Dependency d = dependency.setArtifact( originalArtifact );
ArtifactDescriptorRequest descriptorRequest = createArtifactDescriptorRequest(
- args.request.getRequestContext(), args.trace, context.repositories, d );
+ args.request.getRequestContext(), trace, context.repositories, d );
final ArtifactDescriptorResult descriptorResult =
noDescriptor
@@ -236,8 +238,8 @@ public class BfDependencyCollector
originalArtifact.getGroupId().equals( d.getArtifact().getGroupId() )
&& originalArtifact.getArtifactId().equals( d.getArtifact().getArtifactId() );
- processDependency( args, results, context.withDependency( d ), descriptorResult.getRelocations(),
- disableVersionManagementSubsequently );
+ processDependency( args, parent, results, context.withDependency( d ),
+ descriptorResult.getRelocations(), disableVersionManagementSubsequently );
return;
}
else
@@ -372,8 +374,6 @@ public class BfDependencyCollector
final boolean premanagedState;
- final RequestTrace trace;
-
final DataPool pool;
final Queue<DependencyProcessingContext> dependencyProcessingQueue = new ArrayDeque<>( 128 );
@@ -386,7 +386,7 @@ public class BfDependencyCollector
final DependencyResolutionSkipper skipper;
- Args( RepositorySystemSession session, RequestTrace trace, DataPool pool,
+ Args( RepositorySystemSession session, DataPool pool,
DefaultDependencyCollectionContext collectionContext, DefaultVersionFilterContext versionContext,
CollectRequest request, DependencyResolutionSkipper skipper )
{
@@ -394,7 +394,6 @@ public class BfDependencyCollector
this.request = request;
this.ignoreRepos = session.isIgnoreArtifactDescriptorRepositories();
this.premanagedState = ConfigUtils.getBoolean( session, false, DependencyManagerUtils.CONFIG_PROP_VERBOSE );
- this.trace = trace;
this.pool = pool;
this.collectionContext = collectionContext;
this.versionContext = versionContext;
diff --git a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/collect/df/DfDependencyCollector.java b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/collect/df/DfDependencyCollector.java
index 4bfaf872..a12a39a0 100644
--- a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/collect/df/DfDependencyCollector.java
+++ b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/collect/df/DfDependencyCollector.java
@@ -102,9 +102,9 @@ public class DfDependencyCollector
NodeStack nodes = new NodeStack();
nodes.push( node );
- Args args = new Args( session, trace, pool, nodes, context, versionContext, request );
+ Args args = new Args( session, pool, nodes, context, versionContext, request );
- process( args, results, dependencies, repositories,
+ process( args, trace, results, dependencies, repositories,
session.getDependencySelector() != null
? session.getDependencySelector().deriveChildSelector( context ) : null,
session.getDependencyManager() != null
@@ -116,40 +116,41 @@ public class DfDependencyCollector
}
@SuppressWarnings( "checkstyle:parameternumber" )
- private void process( final Args args, Results results, List<Dependency> dependencies,
+ private void process( final Args args, RequestTrace trace, Results results, List<Dependency> dependencies,
List<RemoteRepository> repositories, DependencySelector depSelector,
DependencyManager depManager, DependencyTraverser depTraverser, VersionFilter verFilter )
{
for ( Dependency dependency : dependencies )
{
- processDependency( args, results, repositories, depSelector, depManager, depTraverser, verFilter,
+ processDependency( args, trace, results, repositories, depSelector, depManager, depTraverser, verFilter,
dependency );
}
}
@SuppressWarnings( "checkstyle:parameternumber" )
- private void processDependency( Args args, Results results, List<RemoteRepository> repositories,
+ private void processDependency( Args args, RequestTrace trace, Results results, List<RemoteRepository> repositories,
DependencySelector depSelector, DependencyManager depManager,
DependencyTraverser depTraverser, VersionFilter verFilter, Dependency dependency )
{
List<Artifact> relocations = Collections.emptyList();
- processDependency( args, results, repositories, depSelector, depManager, depTraverser, verFilter, dependency,
- relocations, false );
+ processDependency( args, trace, results, repositories, depSelector, depManager, depTraverser, verFilter,
+ dependency, relocations, false );
}
@SuppressWarnings( "checkstyle:parameternumber" )
- private void processDependency( Args args, Results results, List<RemoteRepository> repositories,
- DependencySelector depSelector, DependencyManager depManager,
- DependencyTraverser depTraverser, VersionFilter verFilter, Dependency dependency,
- List<Artifact> relocations, boolean disableVersionManagement )
+ private void processDependency( Args args, RequestTrace parent, Results results,
+ List<RemoteRepository> repositories, DependencySelector depSelector,
+ DependencyManager depManager, DependencyTraverser depTraverser,
+ VersionFilter verFilter, Dependency dependency, List<Artifact> relocations,
+ boolean disableVersionManagement )
{
-
if ( depSelector != null && !depSelector.selectDependency( dependency ) )
{
return;
}
+ RequestTrace trace = trailTrace( parent, args.request.getRequestContext(), args.nodes.nodes, dependency );
PremanagedDependency preManaged =
PremanagedDependency.create( depManager, dependency, disableVersionManagement, args.premanagedState );
dependency = preManaged.getManagedDependency();
@@ -162,7 +163,7 @@ public class DfDependencyCollector
VersionRangeResult rangeResult;
try
{
- VersionRangeRequest rangeRequest = createVersionRangeRequest( args.request.getRequestContext(), args.trace,
+ VersionRangeRequest rangeRequest = createVersionRangeRequest( args.request.getRequestContext(), trace,
repositories, dependency );
rangeResult = cachedResolveRangeResult( rangeRequest, args.pool, args.session );
@@ -181,7 +182,7 @@ public class DfDependencyCollector
Dependency d = dependency.setArtifact( originalArtifact );
ArtifactDescriptorRequest descriptorRequest = createArtifactDescriptorRequest(
- args.request.getRequestContext(), args.trace, repositories, d );
+ args.request.getRequestContext(), trace, repositories, d );
final ArtifactDescriptorResult descriptorResult =
getArtifactDescriptorResult( args, results, noDescriptor, d, descriptorRequest );
@@ -212,8 +213,8 @@ public class DfDependencyCollector
originalArtifact.getGroupId().equals( d.getArtifact().getGroupId() )
&& originalArtifact.getArtifactId().equals( d.getArtifact().getArtifactId() );
- processDependency( args, results, repositories, depSelector, depManager, depTraverser, verFilter, d,
- descriptorResult.getRelocations(), disableVersionManagementSubsequently );
+ processDependency( args, parent, results, repositories, depSelector, depManager, depTraverser,
+ verFilter, d, descriptorResult.getRelocations(), disableVersionManagementSubsequently );
return;
}
else
@@ -232,8 +233,8 @@ public class DfDependencyCollector
boolean recurse = traverse && !descriptorResult.getDependencies().isEmpty();
if ( recurse )
{
- doRecurse( args, results, repositories, depSelector, depManager, depTraverser, verFilter, d,
- descriptorResult, child );
+ doRecurse( args, parent, results, repositories, depSelector, depManager, depTraverser,
+ verFilter, d, descriptorResult, child );
}
}
}
@@ -251,7 +252,7 @@ public class DfDependencyCollector
}
@SuppressWarnings( "checkstyle:parameternumber" )
- private void doRecurse( Args args, Results results, List<RemoteRepository> repositories,
+ private void doRecurse( Args args, RequestTrace trace, Results results, List<RemoteRepository> repositories,
DependencySelector depSelector, DependencyManager depManager,
DependencyTraverser depTraverser, VersionFilter verFilter, Dependency d,
ArtifactDescriptorResult descriptorResult, DefaultDependencyNode child )
@@ -280,7 +281,7 @@ public class DfDependencyCollector
args.nodes.push( child );
- process( args, results, descriptorResult.getDependencies(), childRepos, childSelector, childManager,
+ process( args, trace, results, descriptorResult.getDependencies(), childRepos, childSelector, childManager,
childTraverser, childFilter );
args.nodes.pop();
@@ -340,8 +341,6 @@ public class DfDependencyCollector
final boolean premanagedState;
- final RequestTrace trace;
-
final DataPool pool;
final NodeStack nodes;
@@ -352,7 +351,7 @@ public class DfDependencyCollector
final CollectRequest request;
- Args( RepositorySystemSession session, RequestTrace trace, DataPool pool, NodeStack nodes,
+ Args( RepositorySystemSession session, DataPool pool, NodeStack nodes,
DefaultDependencyCollectionContext collectionContext, DefaultVersionFilterContext versionContext,
CollectRequest request )
{
@@ -360,7 +359,6 @@ public class DfDependencyCollector
this.request = request;
this.ignoreRepos = session.isIgnoreArtifactDescriptorRepositories();
this.premanagedState = ConfigUtils.getBoolean( session, false, DependencyManagerUtils.CONFIG_PROP_VERBOSE );
- this.trace = trace;
this.pool = pool;
this.nodes = nodes;
this.collectionContext = collectionContext;