wt., 24 maj 2022 o 11:17 Tamás Cservenák <ta...@cservenak.net> napisał(a):

> Howdy,
>
> inline only the "interesting" part:
>
> So, after playing a bit with 1.8.0[.1] of the BF/DF resolvers and your #176
> > PR, I see that example
> >
> >
> org.eclipse.aether.internal.impl.collect.DependencyCollectorDelegate#dependencyCollected()
> > extension point you've introduced is a bit too early for my use case...
> > It's invoked during dependency collection, but I think it'd be better to
> > simply use "full path" when there's actual download (or resolution from
> > local repository).
> >
>
> This part I don't quite get: "too early"? What do you mean here?
> As events you use are fired "even before" as I see...
>

By "too early" I mean that your dependencyCollected() was already printing
the path, while in my case I was only pushing current dependency on top of
the stack and full stack was available later in an implementation of
org.eclipse.aether.AbstractRepositoryListener

However I didn't check if that's simply not the same - I thought that I
could have several stack pushed before my implementation of
org.eclipse.aether.AbstractRepositoryListener#artifactDownloaded() was
called - but I may be wrong.


>
>
> >
> > My whole need to extend resolver was to collect the path from initial to
> > final dependency, so the stack is available when it's needed.
> >
>
> Isn't the PR doing that? Or did I miss something?
>

as above - I was only thinking that there's a difference between these two:
 - your PR calls dependencyCollected() just after node.getChildren().add()
(DF) or context.getParent().getChildren().add() (BF) and prints the
reversed dependency path
 - my extension pushes the dependency (DF only in resolver 1.6.3) and
prints the path in org.eclipse.aether.RepositoryListener

if these are effectively the same, sorry for confusion ;)


>
>
> >
> > Initially I thought that org.eclipse.aether.RequestTrace should be the
> > thing I could use to get current dependency path, but I found it's not
> > possible.
> >
>
> Yes, my hopes were geared toward RequestTrace as well, as it could
> represent a tree just fine, but....
>
>
> >
> > Maybe your DependencyCollectorDelegate#dependencyCollected() could simply
> > "expose" the List<DependencyNode> path somewhere? Maybe in Maven session?
> > as attribute?
> >
>
> In a moment parallel collection comes into picture (
> https://github.com/apache/maven-resolver/pull/178)
> this will be not enough, as there is one session but multiple threads are
> working on it. Hence,
> I agree that "hooking" onto existing events would be the best, but, sadly
> they are quite disconnected
> from collectors, hence, it is hard to "couple" them in the right manner....
>
> Cleanest would be if the event would carry its own copy of path....
>

Yeah... org.eclipse.aether.RepositoryEvent is very "public", so finding a
path there would be great. However² I print most of the tracking
information not in org.eclipse.aether.RepositoryListener but in overriden
org.eclipse.aether.repository.LocalRepositoryManager#find() (because I
wanted to know ALL the traces back to the ultimate origin of the dependency
- even if it's already downloaded. And org.eclipse.aether.RepositoryEvent
can't help here - that's why I needed the static stack...

I think that indeed - #176 is something that could be both useful and cheap
(defaults to empty method), dependencyCollected() could be invoked with (as
in your PR):
 - context.parents (BF)
 - args.nodes.nodes (DF)

This way my extension would be DF/BF independent and also it could ignore
parallel/serial downloader.

regards
Grzegorz Grzybek


>
>
> Thanks
> T
>

Reply via email to