Keeping major close to maven version in the future can be valuable
Romain Manni-Bucau @rmannibucau <https://x.com/rmannibucau> | .NET Blog <https://dotnetbirdie.github.io/> | Blog <https://rmannibucau.github.io/> | Old Blog <http://rmannibucau.wordpress.com> | Github <https://github.com/rmannibucau> | LinkedIn <https://www.linkedin.com/in/rmannibucau> | Book <https://www.packtpub.com/en-us/product/java-ee-8-high-performance-9781788473064> Javaccino founder (Java/.NET service - contact via linkedin) Le dim. 29 mars 2026, 09:43, Delany <[email protected]> a écrit : > Why use semver at all? Since any change in the model breaks compatibility > then isn't a natural number more appropriate? > > Delany > > On Sat, 28 Mar 2026, 16:15 Mirko Friedenhagen, <[email protected]> > wrote: > > > > > Mit freundlichen Grüßen > > Mirko Friedenhagen > > — > > > > Am 28.03.2026 um 16:40 schrieb Fabrice Bauzac <[email protected]>: > > > The problem if you change the namespace, is that certain tools that > > > are currently tuned and working well with {MavenModel4.0.0}dependency > > > will need changes when told to work on a different element like > > > {MavenModel4.1.0}dependency. That seems like unnecessary breakage, > > > burden and additional work to me, especially if you want 4.0.0 and > > > 4.1.0 to have the same general structure... > > Hi, > > > > I would think this is an advantage. They are basically not the same > though > > they look similar. > > Theoretically 4.2.x could finally use a shortened dependency definition, > > which seems to be one of the major things people find ugly compared to > e.g. > > gradle. > > Additionally fully embraced it would allow more elements in other > > namespaces as well in the same file. > > Versioning is not semver compatible, though. Model 4.1.0 is not > > backwards-compatible to 4.0.0 so theoretically it should get a major > bump. > > > > > XML Schema Definition (XSD) is useful for validation and completion. > > > It is one of the standard ways to do it. It is not useful for most > > > tooling, except for validation and completion. It is not mandatory. > > > It simply maps each namespace like {MavenModel4.1.0} to a downloadable > > > URL containing the schema (or to a local file containing the schema). > > As you say, it is a standard way and so valuable. > > > > > My take on XSD is that it can be used by Maven to run a standard XML > > > validator. However, it is optional; also, the schema URL may point to > > > a local file in a random local directory. So I don't think it is a > > > good idea for Maven to deduce anything from the schema URL, which may > > > be present or absent or have different values. I think Maven should > > > instead rely on <modelVersion> alone. And the XSD information should > > > remain optional, so people who don't need it can remove it... > > Here I would disagree: either use model version or XSD. Otherwise you may > > have contradicting information. > > > > > > > Thanks! > > > > > > Best regards > > > Fabrice > > > > > > > > >> Le ven. 27 mars 2026 à 12:03, Maarten Mulders <[email protected]> > > a écrit : > > >> Let me try to wrap up my current understanding of where we are: > > >> 1. The namespace is used to infer the model version. > > >> 2. The model version determines which inference Maven will apply when > > >> reading the POM file from disk. > > >> 3. The POM file on disk can never describe the full model Project > Object > > >> Model, as many of that model is inferred and/or inherited. > > >> Given 3. (and 2.) I think we should state: "understanding a POM file > on > > >> disk is not possible without using the Maven libraries that read, > parse > > >> and interpret it". This statement applies to any POM file, regardless > of > > >> whether it is XML or another format. > > >> Q: Does that make sense? > > >> I think a potential conclusion could be that support for tools outside > > >> the Maven libraries to "understand" or "process" a POM file on disk is > > >> not our priority or maybe not even our concern. > > >> Q: Is that something we agree upon? Shoud we vote on this? > > >> One more thing: In the XML world, we derive the model version from the > > >> namespace. I will leave it in the middle if that is good or bad, > that's > > >> just how it works today. How is that supposed to work in other, > non-XML > > >> formats, that might not have the notion of namespaces? > > >> Maarten > > >>> On 22/03/2026 10:52, Hervé Boutemy wrote: > > >>> I'm not sure the feature is understood: modelVersion inference is > > there to not > > >>> being forced to write a XML element when a XML namespace is set > > >>> so with Maven 3, we are forced to write: > > >>> <project> > > >>> <modelVersion>4.0.0</modelVersion> > > >>> [and groupId, artifactId, version at minimum] > > >>> </project> > > >>> and the addition of a XML namespace does just add more characters > > >>> with Maven 4, if we configure a namespace, we can simplify: > > >>> <project xmlns="http://maven.apache.org/POM/4.1.0"> > > >>> [and groupId, artifactId, version at minimum] > > >>> </project> > > >>> modelVersion field value (required by Maven in-memory model for > Maven 3 > > >>> compatibility) > > >>> and as any other Maven feature when there are default values, > > inference works > > >>> in a very natural way: it happens as a default value if not > explicitely > > >>> written > > >>>> at the cost of supporting a xml parser client side....in 2026 > > >>> this part I don't get: it's not about XML parser, it's about > effective > > model > > >>> building, with inheritance, and so on, and now inference > > >>> People can play with this inference feature, it's the bast way to > > learn this > > >>> new feature in a more complete way than read and half-remember: > > >>> take a minimal pom.xml like: > > >>> <project xmlns="http://maven.apache.org/POM/4.1.0"> > > >>> <!--modelVersion>4.0.0</modelVersion--> > > >>> <groupId>com.example</groupId> > > >>> <artifactId>parent</artifactId> > > >>> <version>1.0.0-SNAPSHOT</version> > > >>> <description>modelVersion = ${project.modelVersion}</description> > > >>> </project> > > >>> and run "mvn help:effective-pom | grep modelVersion" to see the > result > > when you > > >>> remove namespace, un-comment modelVersion, with Maven 3 or Maven 4 > > (since > > >>> alpha-6) > > >>> very natural, very smart: just a new habit of simplification that > > users will > > >>> have to discover that they can enjoy on less XML line with a stupid > > value. > > >>> Regards, > > >>> Hervé > > >>> Le dimanche 22 mars 2026, 09:20:24 CET Romain Manni-Bucau a écrit : > > >>>> Think it is a sane summary Hervé but also agréé with David that we > can > > >>>> ditch model version now (since namespace opens doors for the future > > model > > >>>> version will never by design at the cost of supporting a xml parser > > client > > >>>> side....in 2026). > > >>>> +1 for a vote > > >>>> Romain Manni-Bucau > > >>>> @rmannibucau <https://x.com/rmannibucau> | .NET Blog > > >>>> <https://dotnetbirdie.github.io/> | Blog < > > https://rmannibucau.github.io/> | > > >>>> Old Blog <http://rmannibucau.wordpress.com> | Github > > >>>> <https://github.com/rmannibucau> | LinkedIn > > >>>> <https://www.linkedin.com/in/rmannibucau> | Book > > >>>> < > > > https://www.packtpub.com/en-us/product/java-ee-8-high-performance-978178847 > > >>>> 3064> Javaccino founder (Java/.NET service - contact via linkedin) > > >>>> Le dim. 22 mars 2026, 05:12, David Jencks <[email protected] > > > > a > > >>>> écrit : > > >>>>> I’m still in the peanut gallery, but I don’t understand any > possible > > way > > >>>>> providing two ways to specify the model version makes any sense. > > >>>>> Let’s say I use both, and specify different versions. How should I > > guess > > >>>>> which wins? I thought the idea of specifying something > unambiguously > > in > > >>>>> one > > >>>>> place was a generally accepted principle of good design. > > >>>>> I was really hoping the namespace change would be rolled back. I > > haven’t > > >>>>> seen any explanation of how it is useful. > > >>>>> David Jencks > > >>>>> Sent from my iPhone > > >>>>>> On Mar 21, 2026, at 7:34 PM, Hervé Boutemy <[email protected] > > > > >>>>> wrote: > > >>>>>> I went on improving documentation for modelVersion field: > > >>>>>> - Maven 3:https://github.com/apache/maven/pull/11809 > > >>>>>> - Maven 4.0.x: https://github.com/apache/maven/pull/11810 > > >>>>>> and I suppose once 4.0.x is merged, we'll do 4.1.x, that adds > 4.2.0 > > >>>>> value for > > >>>>>> modelVersion: > > >>>>>> > > https://maven.apache.org/ref/4-LATEST/api/maven-api-model/maven.html > > >>>>>> my key learning in that journey is that in Maven 4, modelVersion > > can be > > >>>>>> inferred from namespace: I did not get it until now, really nice. > > It's > > >>>>> up to > > >>>>>> the parser to eventually do some inference to fill the field. > > >>>>>> This also lead me to rethink: reading one pom.xml or .pom file is > > nice, > > >>>>> but > > >>>>>> what is important from Maven perspective is effective POM = the > > model in > > >>>>>> memory, after inheritance, and now inference > > >>>>>> = the result of > > https://maven.apache.org/ref/3.9.14/maven-model-builder/ > > >>>>>> What is important for individual pom.xml read/update is IDE > support, > > >>>>> with in- > > >>>>>> depth understanding of the path from individual file to effective > > model. > > >>>>>> so all in all, I'm starting to be convinced that > > >>>>>> 1. fixed or versioned namespace is 100% a style decision > > >>>>>> 2. we get a benefit from versioned namespace: modelVersion > inference > > >>>>>> 3. AFAIK, IDEs did not object to that aspect of pom.xml vs > effective > > >>>>> POM, no > > >>>>>> precise big trouble reported > > >>>>>> I updated the topic description in the tracking doc for Maven > 4.0.0 > > GA: > > >>>>>> https://cwiki.apache.org/confluence/pages/viewpage.action? > > >>>>>> pageId=406620656#Maven4.0.0GAchecklist-Maven4Namespace > > >>>>>> Are the pros and cons sufficiently understood/documented now for > > >>>>> everybody? > > >>>>>> Any objection/topic to cover before launching a vote to make an > > >>>>> enlightened > > >>>>>> decision? > > >>>>>> Regards, > > >>>>>> Hervé > > >>>>>> Le lundi 16 mars 2026, 11:30:09 CET Romain Manni-Bucau a écrit : > > >>>>>>> it is where maven always had been weird-ish, it relies heavily on > > XML > > >>>>> but > > >>>>>>> doesn't actualy embrace XML - just cause of one line. > > >>>>>>> the impact is that if you need some extension configuration to > > inject > > >>>>>>> in > > >>>>>>> the pom - natural compared to have pom.xml extension1.xml, > > >>>>> extension2.json > > >>>>>>> etc..., then you must use properties or plugin configuration even > > when > > >>>>> not > > >>>>>>> needed. > > >>>>>>> Guillaume made some enhancement on that but namespaces are > > designed for > > >>>>>>> that and don't have any issue nor maven has any nor any consuming > > tool > > >>>>> as > > >>>>>>> soon as they do parse XML. > > >>>>>>> The only issue we can get if we do want portable pom, ie > > extensionless > > >>>>>>> otherwise the pom is no more the only source of truth and all > that > > is > > >>>>>>> pointless. > > >>>>>>> So yes modelVersion can be used as a source but a namespace as > > well and > > >>>>> it > > >>>>>>> doesn't imply any remoting even using https://... since we do > > embed > > >>>>> xsd in > > >>>>>>> the project. > > >>>>>>> So overall, from my window it is 100% a style decision. > > >>>>>>> The only point which can weight there for me is if we do support > > >>>>>>> polygloting or we consider it is an extension we don't care about > > - I'm > > >>>>>>> fine both ways since it is broken in IDE anyway. > > >>>>>>> If we think it is a core/important feature, namespacing can make > it > > >>>>> complex > > >>>>>>> for nothing and modelVersion is easier but it is the only real > > criteria > > >>>>> for > > >>>>>>> maven 4 IMHO, other points are wrong technically. > > >>>>>>> Romain Manni-Bucau > > >>>>>>> @rmannibucau <https://x.com/rmannibucau> | .NET Blog > > >>>>>>> <https://dotnetbirdie.github.io/> | Blog < > > >>>>> https://rmannibucau.github.io/> | > > >>>>>>> Old Blog <http://rmannibucau.wordpress.com> | Github > > >>>>>>> <https://github.com/rmannibucau> | LinkedIn > > >>>>>>> <https://www.linkedin.com/in/rmannibucau> | Book > > >>>>>>> < > > >>>>> > > > https://www.packtpub.com/en-us/product/java-ee-8-high-performance-97817884 > > >>>>> 7 > > >>>>>>> 3064> Javaccino founder (Java/.NET service - contact via > linkedin) > > >>>>>>>> Le lun. 16 mars 2026 à 11:08, Björn Raupach <[email protected]> > a > > >>>>> écrit : > > >>>>>>>> Elliot, I don’t want to stir up a hornet’s nest, but could you > > give me > > >>>>> a > > >>>>>>>> specific example of where it would cause a problem? > > >>>>>>>> In Maven 3.9.x the namespace declaration never mattered in all > the > > >>>>>>>> projects I used it with. I fail to understand why it matters in > > Maven > > >>>>> 4. > > >>>>>>>> All these allow Maven to execute and run: > > >>>>>>>> <project> > > >>>>>>>> <modelVersion>4.0.0</modelVersion> > > >>>>>>>> <groupId>com.mycompany.app</groupId> > > >>>>>>>> <artifactId>my-app</artifactId> > > >>>>>>>> <version>1</version> > > >>>>>>>> </project> > > >>>>>>>> <project xmlns="foo"> > > >>>>>>>> <modelVersion>4.0.0</modelVersion> > > >>>>>>>> <groupId>com.mycompany.app</groupId> > > >>>>>>>> <artifactId>my-app</artifactId> > > >>>>>>>> <version>1</version> > > >>>>>>>> </project> > > >>>>>>>> <project xmlns="xmlns=http://maven.apache.org/POM/4.0.0”> > > >>>>>>>> <modelVersion>4.0.0</modelVersion> > > >>>>>>>> <groupId>com.mycompany.app</groupId> > > >>>>>>>> <artifactId>my-app</artifactId> > > >>>>>>>> <version>1</version> > > >>>>>>>> </project> > > >>>>>>>> I admit that my expertise in XML is limited, but I worked with > > XML in > > >>>>>>>> a > > >>>>>>>> highly regulated environment. They used XML namespaces and > schemas > > >>>>>>>> extensively. > > >>>>>>>> In that project, XML documents were a composition of many XML > > >>>>> documents, > > >>>>>>>> each with its own XML namespaces and schema. > > >>>>>>>> Every element and attribute hat do use a qualified name. > > >>>>>>>> The XML namespaces were used to avoid element names clashes, > > because > > >>>>>>>> some elements had the same name, but belonged to a different > "XML > > >>>>>>>> vocabulary". > > >>>>>>>> Therefore, it made sense to qualify every element with its > prefix. > > >>>>>>>> Isn’t this the only reason why we need namespaces in the first > > place? > > >>>>>>>> I > > >>>>>>>> have never seen a qualified name in any pom.xml in the last > twenty > > >>>>>>>> years. > > >>>>>>>> The XML schema was used to verify the various XML documents that > > made > > >>>>> up > > >>>>>>>> the larger XML document. > > >>>>>>>> The schema ensured that the vocabulary, i.e. the sum of XML > > elements > > >>>>> and > > >>>>>>>> attributes for that part of the document was used correctly. > > >>>>>>>> Nothing more. While this was useful, the namespace itself was > > never > > >>>>>>>> verified using the XML schema. I don't think that's even > possible. > > >>>>>>>> Namespaces do nothing more than avoid name collisions. Maven > does > > not > > >>>>>>>> have a problem with names coming from different sources. > > >>>>>>>> Am 16.03.2026 08:20 schrieb Guillaume Nodet: > > >>>>>>>>> Regarding the namespace discussion, I'd like to better > > understand the > > >>>>>>>>> concrete difficulty with processing POMs that have different > > >>>>>>>>> namespaces. > > >>>>>>>>> In XSLT, a simple namespace normalization pre-processing step > > handles > > >>>>>>>>> this: > > >>>>>>>>> <xsl:template match="*"> > > >>>>>>>>> <xsl:element name="{local-name()}" > > >>>>>>>>> namespace="http://maven.apache.org/POM/4.0.0"> > > >>>>>>>>> <xsl:apply-templates select="@*|node()"/> > > >>>>>>>>> </xsl:element> > > >>>>>>>>> </xsl:template> > > >>>>>>>>> In XPath, you can use local-name(): > > >>>>>>>>> //*[local-name()='dependency'] > > >>>>>>>>> Or in XPath/XSLT 2.0+, wildcard namespace matching: > > >>>>>>>>> //*:dependency > > >>>>>>>>> I want to make sure we're weighing the actual cost accurately > on > > both > > >>>>>>>>> sides > > >>>>>>>>> before making a decision. > > >>>>>>>>> Guillaume > > >>>>>>>>> Le sam. 14 mars 2026 à 22:15, Elliotte Rusty Harold > > >>>>>>>>> <[email protected]> a > > >>>>>>>>> écrit : > > >>>>>>>>>> On Sat, Mar 14, 2026 at 4:17 PM Hervé Boutemy < > > [email protected] > > >>>>>>>>>> wrote: > > >>>>>>>>>>> sorry, I don't get what has been done, "years ago": can you > > >>>>>>>>>>> explain? > > >>>>>>>>>>> and TBH, I don't get what changing namespace value really > > breaks > > >>>>>>>> beyond > > >>>>>>>>>> some > > >>>>>>>>>>> very theoretical aspect: so changing or not changing in one > or > > the > > >>>>>>>> other > > >>>>>>>>>>> direction, what does it break? > > >>>>>>>>>> I have said this before. I'm guess I'm going to have to say it > > >>>>>>>>>> again. > > >>>>>>>>>> The problems are not theoretical. I have personally spent > extra > > >>>>> months > > >>>>>>>>>> of development on projects (which Google paid for at the time, > > so > > >>>>>>>>>> probably six figures worth of Google's money) because I could > > not > > >>>>>>>>>> use > > >>>>>>>>>> standard XML tooling like XSLT and XPath to process pom.xml > > files. > > >>>>> The > > >>>>>>>>>> specific reason was Maven not using namespaces as designed and > > >>>>>>>>>> documented in the Namespaces in XML specification. Adding new > > >>>>>>>>>> namespaces makes the problem worse. > > >>>>>>>>>> There are other tools I have never bothered to build because > > they'd > > >>>>>>>>>> simply be too challenging and expensive to create. > > >>>>>>>>>> There is no benefit to introducing new namespaces with every > > version > > >>>>>>>>>> of Maven and substantial cost. The burden of proof is on those > > who > > >>>>>>>>>> claim we should change the namespace and work against the > > design of > > >>>>>>>>>> XML namespaces. > > >>>>>>>>>> -- > > >>>>>>>>>> Elliotte Rusty Harold > > >>>>>>>>>> [email protected] > > >>>>>>>>>> > > -------------------------------------------------------------------- > > >>>>>>>>>> - > > >>>>>>>>>> To unsubscribe, e-mail: [email protected] > > >>>>>>>>>> For additional commands, e-mail: [email protected] > > >>>>>>>> > > --------------------------------------------------------------------- > > >>>>>>>> To unsubscribe, e-mail: [email protected] > > >>>>>>>> For additional commands, e-mail: [email protected] > > >>>>>> > > --------------------------------------------------------------------- > > >>>>>> To unsubscribe, e-mail: [email protected] > > >>>>>> For additional commands, e-mail: [email protected] > > >>>>> > --------------------------------------------------------------------- > > >>>>> To unsubscribe, e-mail: [email protected] > > >>>>> For additional commands, e-mail: [email protected] > > >>> --------------------------------------------------------------------- > > >>> To unsubscribe, e-mail: [email protected] > > >>> For additional commands, e-mail: [email protected] > > >> --------------------------------------------------------------------- > > >> To unsubscribe, e-mail: [email protected] > > >> For additional commands, e-mail: [email protected] > > > > > > --------------------------------------------------------------------- > > > To unsubscribe, e-mail: [email protected] > > > For additional commands, e-mail: [email protected] > > > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: [email protected] > > For additional commands, e-mail: [email protected] > > > > >
