Roughly, https://maven.apache.org/pom.html#Version_Order_Specification is normative.
If Maven itself is doing something contrary to that spec, we need to take a look. It's possible that the spec is wrong in some edge cases, but more likely the code is wrong. If there are edge cases the spec doesn't address, that's a bug in the spec. This applies to maven itself. maven-artifact-3.9.11 is something different and can be (and sometimes is) wrong independently of the spec or Maven. Also, please set your reply-to address to your actual address. On Tue, Aug 5, 2025 at 5:21 PM Ron Desmond <rhdesm...@google.com.invalid> wrote: > > Hi, > > I'm ironing out my understanding of the Maven Version Order Spec > <https://maven.apache.org/pom.html#Version_Order_Specification> and had > three questions: one was related to an implicit separator before the > beginning of versions, and the next two were related to trimming. > > ------------ > *Implicit Separator* > > From my (limited) understanding, the maven-artifact-3.9.11 tool seems to > use hyphens to create a ListItem, and an initial hyphen would suggest the > creation of the tokens list. So if the version begins with a '-', there's > a nested list because the tokens are an empty non-numeric segment (the > implicit initial hyphen) followed by the hyphen-separator numeric token > "-1". The maven-artifact jar confirms this for versions "1" and "-1", > which results in 1 > -1: > > tokens(1) = [1] > tokens(-1) = [[1]] > > 1 > -1 > > ---- > > I did run into one seeming inconsistency for this idea when the tool > compares "sp" and "ga-1" > > tokens(sp) = -sp = [sp] > tokens(ga-1) = -1 = [[1]] // trimming removes "ga" > > > *sp < ga-1 // maven-artifact output is unexpected because sp > "" * > > > ---- > > The argument may be made that the *initial implicit separator is a period*, > and that all versions are enclosed by a list. This would explain the > nested list of "-1": > > tokens(sp) = .sp = [sp] // all versions are a ListItem > > tokens(ga-1) = .ga-1 > = -1 // trimming starting from the last hyphen > > = [[1]] // ListItem "-1" is enclosed within the initial list > > sp < [-1] // special qualifier "sp" is less than hyphen-numeric token [1] > > ---- > > The implicit period separator still holds for "-1" due to normalization and > trimming: > > tokens(-1) = .-1 > > = 0.0-1 // normalization adds zeroes > = -1 // trimming removes zeroes > = [[1]] // initial list holds a hyphen-numeric token > > > ------------ > > *Trimming* > The remaining confusion I had was related to trimming: consider "--1--" and > "--1-" > > My understanding of the spec would be the following (excluding the initial > separator idea above): > > tokens(--1--) > > = -0-1-0-0 // normalization: "Empty tokens are replaced with "0" " > = -1 // trimming: "the trailing "null" values...are > trimmed. This process is repeated at each remaining hyphen " > = [[1]] // initial list (or implicit hyphen) enclosing > hyphen-numeric token > > tokens(--1-) > = -0-1-0 > = -1 > = [[1]] > > However, the maven-artifact output is different: > > > > *1. -1-- -> 1; tokens: [[1]] -1-- > --1-2. --1- -> 1; tokens: [[[1]]]* > > It seems like trimming is not happening after the "-1" token. > > ---- > ABC vs. -ABC Problem > > I'm having trouble reconciling the following case of "abc" vs. "-abc". Via > the trimming logic, I'd expect > > tokens(-abc) = "0-abc" (empty tokens replace with "0") > = "abc" (trimming) > = tokens(abc) > > but the output of the tool is below: > > > > *1. abc -> abc; tokens: [abc] abc < -abc2. -abc -> abc; tokens: [[abc]]* > > ------------ > > > So to recap, had three questions: > > 1) should versions be treated as if there's an implicit separator? > 2) how should trimming/tokenization work for "--1--" and "--1-"? > 3) how should trimming/tokenization work for "abc" and "-abc"? > > Hope this isn't too confusing and/or lengthy. Thanks for your time and > have a good day! > > > Best, > > Ron -- Elliotte Rusty Harold elh...@ibiblio.org --------------------------------------------------------------------- To unsubscribe, e-mail: users-unsubscr...@maven.apache.org For additional commands, e-mail: users-h...@maven.apache.org