Howdy,
I don't know how Human Interfaces and "modes" came into play, but I
find this one more fitting here:
https://en.wikipedia.org/wiki/Arborescence_(graph_theory)
So get accustomed, as this is what we talk about (or at least me :D )
The beauty is that with this in mind, the definition "no other version
appears earlier in the dependency tree" completely makes sense, as
arborescence is also a DAG.
We consider "root POM" the root of arborescence, yes, if that is
anything special. Well, it is, it is the root and as such, it has no
"parent nodes" ("earlier nodes" so to say) by definition.
Hence, the written spec "Use 1.0 if no other version appears earlier
in the dependency tree" is fine.
T
On Thu, Oct 23, 2025 at 1:50 PM Vladimir Sitnikov
<[email protected]> wrote:
>
> 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
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]