[ 
https://issues.apache.org/jira/browse/MNG-7802?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17728840#comment-17728840
 ] 

Tamas Cservenak commented on MNG-7802:
--------------------------------------

I retract my comment above, does not looks good. Here is what happens:

session.UpdatePolicy == IF null, remoteRepository policy is applied, IF 
non-null, session overrides always.

So, what happens in maven-core DefaultRepositorySystemSessionFactory is 
CORRECT(-U present? ALWAYS, -nsu present? NEVER, otherwise null => let the repo 
policy decide).

Other question is like "why are they named like this" and how is this possible:
{noformat}
[cstamas@blondie maven (maven-3.9.x)]$ mvn -U -nsu clean
[INFO] Scanning for projects...
[INFO {noformat}
(so what happens now? both options given, but Maven does not nags about nothing)

But this is more for MNG-7803 (change help text and add some validation maybe?)

IMHO, problems for this issue are following:
 * default value for update policy = "never"
 * "en gros" application of policy (irrelevant is it "global", from session or 
"local", from remote repo) to both, artifacts and metadata

Default value affects "built in" repository central only: 
 * if we set "never" as today, things like versions:display-plugin-updates and 
alike (version resolution) will only work with -U, and this is the reason why 
everyone on earth uses this plugin with -U
 * if we set to "daily", it will make Maven perform conditional GETs for 
release artifacts in central (that are immutable) => wasteful nonsense

Note: "never" policy and versions plugin has been addressed with a hack: 
[https://github.com/mojohaus/versions/commit/82e2450d8bbd22c3f8cdc06d44c44d618c69e23e]
 BUT IMHO this is not a solution, as every other Mojo relying on version 
resolution is forced to do the same thing!

And here we arrive to 2nd problem: "en gros" application of policy to both, 
artifacts and metadata.

As discovered during lengthy MRESOLVER-363 (and related 
[https://github.com/mojohaus/versions/issues/959|https://github.com/mojohaus/versions/issues/959)]
 TLDR; user had corrupted local repo, so "last update" for he's metadata was 
Jan 1 1970 but Maven did not update (showed new version), as policy for central 
is "never"! Only -U helps )
 * central with "never" policy causes that central "show me updates" use cases 
(versions:display-xxx-updates) does not work as expected without -U
 * problem was not artifact, but metadata update, and in some sense, resolver 
was right: did not update, as policy of central is "never"
 * resolver distinguish (and have separate exec paths for artifacts and 
metadata) but applies SAME policy (that configured in remote repository) to 
BOTH 

 

> Fix behaviour of the maven update policy
> ----------------------------------------
>
>                 Key: MNG-7802
>                 URL: https://issues.apache.org/jira/browse/MNG-7802
>             Project: Maven
>          Issue Type: Bug
>            Reporter: Guillaume Nodet
>            Assignee: Guillaume Nodet
>            Priority: Major
>
> The update policy can be specified using the {{-U}} (force update) or 
> {{-nsu}} (no update) options, but those options change the whole repository 
> session policy and override any settings on the repositories.
> This means that if {{-U}} is set, the resolver will attempt to check already 
> downloaded artifacts.  This is wrong and the behaviour has been inherited 
> from maven 2.x.
> What we really wants (and what's implied by the name of the options and docs) 
> is to check for new artifacts / updates, so this mainly affect _version 
> resolution_ and not {_}artifact resolution{_}.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to