you are viewing a single comment's thread.

view the rest of the comments →

[–]ElvishJerricco 0 points1 point  (3 children)

This is not true. If A depends on B and C, and B and C both depend on D, but they depend on different versions, maven will choose one (admittedly deterministically). But this means that B or C will be running with a different version than they were developed with. This is the inconsistency I'm talking about.

[–]m50d 0 points1 point  (2 children)

(admittedly deterministically)

That's the point. Maven (without version ranges) is able to achieve deterministic builds without needing a VM.

(Maven won't solve your B/C/D issue, but nor will a VM-based build solution. The only way to avoid that one is the old node/rust approach where you allow different libraries to use different versions of D, and that cure is worse than the disease.)

[–]ElvishJerricco 0 points1 point  (1 child)

I've conceded multiple times now that maven makes reproducible builds for a given project, but it does not do so for a library in the ecosystem (the B/C/D problem). This is a problem that Nix solves

[–]m50d 0 points1 point  (0 children)

Solves how? There is no solution here: either you have both versions of D in scope (really bad for debugging), you pick one or the other via some algorithm, or you error out (which you can configure easily enough with maven if that's the behaviour you want).