What does the specification say regarding the transitive?
What does "earlier in the dependency tree" even mean for a library POM?

mode="selectionStrategy=highest skipper=versioned"

I agree there should be a way for the end-users to enforce a version.

However, I think Maven already has a way to do so.
Users could configure <version>[1.0]</version>, which would have a clear
meaning:
there's a hard requirement on 1.0.

The POM specification already allows that, and it describes [1.0] as a hard
requirement.

Note that it should be fine to have  <version>[1.0]</version> in either
top-level POM or in a transitive dependency.
In other words, if one of the libraries wants to enforce a version, it
could use [1.0] and be done with it.
Then, the meaning of <version>[1.0]</version> would be the same no matter
where user puts it.

-----

<version>1.0</version> was always documented as a soft requirement,
and I do not see reasons for the tag to have different meanings in
different contexts (top-level POM vs all the other POMs).

See
https://www.oreilly.com/library/view/humane-interface-the/0201379376/0201379376_ch03lev1sec2.html

>Jef Raskin, 2000, Humane Interface, The: New Directions for Designing
Interactive Systems
>Modes are a significant source of errors, confusion, unnecessary
restrictions, and complexity in interfaces

If we consider "root POM" to be special, then the same input (==same POM)
would have different meaning depending
the state (if the POM is root or not).

What is the exact reason you want to have a special meaning for a
"<version>1.0</version>" declared in a root POM?
Frankly, I don't think "declared in the root" means "user wanted to enforce
the version".
What if user wants to enforce a version declared in one of the transitive
modules?

How would you specify the meaning of <version>1.0</version> in the POM
specification if you want special root handling?
Why should it behave differently from exactly the same declaration located
elsewhere?

Vladimir

Reply via email to