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:52 UTC
[maven-resolver] branch tmp-collect-listener-2 created (now e7f04bef)
This is an automated email from the ASF dual-hosted git repository.
cstamas pushed a change to branch tmp-collect-listener-2
in repository https://gitbox.apache.org/repos/asf/maven-resolver.git
at e7f04bef Idea2: collector using RequestTrace
This branch includes the following new commits:
new e7f04bef Idea2: collector using RequestTrace
The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
[maven-resolver] 01/01: Idea2: collector using RequestTrace
Posted by cs...@apache.org.
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;