Document deployment of artifacts by kwin · Pull Request #1588 · apache/maven-resolver
Just for ref, the Slack discussion as well:
So, I don't know can we go with it so simple, as for example, new mvn4 feature is this (visible with -X):
[DEBUG] Final pipeline: offline( rrf( basic( apache-snapshots-b6ad1b6b4141cf7b4e128785f79cbc45945d1ec4 (https://repository.apache.org/content/groups/snapshots, default, snapshots) ) ) )
Maven 4 now "pipeline" connectors, and this is final assembled pipeline in resolver 2:
offline( rrf( basic( target-usually remote repo ) ) )
Roles:
- offline, if repo offline, "shortcuts" and refuse request
- rrf, based (and if present) RRF rules, bounce/refuse requests
- basic, is our "basic" transport, handles transport (Transport) and checksums (corruption protection)
Transport is implementing actual transport like HTTP, FTP, S3 etc. Also, we plan to add new connectors in pipeline, like sigcheck().
What this doco describe is true ONLY if basic connector is used (it implements the well known "roundtrip" maven repo, which focuses on immediate availability), but one could implement other connectors, like for example P2 is (gets stuff from P2 repo), or OBR and those formats are wildly different (btw, the connector/transport separation happened quite late, around maven 3.3.? As before connector+transport was one). For example, Njord is another connector as well (not transport, it in fact reuses file transport from resolver). Mimir is another connector, that implements read-through cache around basic.
Resolver is layered on purpose, and at the same time due this is not quite trivial to explain how it works.
Also, important distinction about "abstraction levels": connectors deals with Artifacts, while transport only about URIs. Transport is blind for "which artifact is this URI for"-like questions.