[ https://issues.apache.org/jira/browse/MNGSITE-550?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17907553#comment-17907553 ]
ASF GitHub Bot commented on MNGSITE-550: ---------------------------------------- mthmulders commented on code in PR #598: URL: https://github.com/apache/maven-site/pull/598#discussion_r1894580250 ########## content/markdown/whatsnewinmaven4.md: ########## @@ -0,0 +1,466 @@ +# What's new in Maven 4? + +Maven is over 20 years old and is one of the most used build-tool in the Java world. +Since all the years one important rule was the highest backward-compatibility as possible, especially with +its [POM-schema with Model version 4.0.0][2], used for the build itself, but also by consumers. +This made Maven more than a tool, but a whole ecosystem with a lot of things depended on the POM, esp. the Maven Central +repository, other build tools and IDEs. +But this stable schema comes at a price - the lack of flexibility. + +> "With the Maven build schema preserved in amber, we can’t evolve much: we’ll stay forever with Maven 3 minor releases, +> unable to implement improvements that we imagine will require seriously updating the POM schema…" +> — <cite>[Hervé Boutemy (in Javaadvent 2021)][1]</cite> + +Maven 4 will prepare to changes which are impossible nowadays, like a complete new build schema. + +Another pain point of Maven 3 is a code base with a lot of deprecated, convoluted, non performant and duplicated code +which costs the volunteers who maintain Maven a lot of time. +This not only means that the Maven codebases contains old Java code that can be optimized nowadays, but also old +dependencies and bad API design of its own APIs, especially for Maven plugins. +Therefore, Maven 4 will also be a maintenance release. + +This article presents and explains major changes brought by Maven 4, grouped into several topics. + +## POM-Changes + +### Build-POM and Consumer-POM + +As written in the introduction the Model version 4.0.0 is used not only for the build, but also by consumers of the +artifact. +But several contents of the POM are only necessary for the build while others like the dependencies are also needed by +the consumer. +Maven 4 will therefore differentiate between a "Build-POM" and a "Consumer-POM". +As names suggest the "Build-POM" will contain all information needed for to build the artifact, e.g. used plugins and +their configuration, while the "Consumer-POM", which is created during the Maven build, will not contain those. +This POM will only keep those which are really needed to use the artifact, e.g. dependency information. + +**Note**: See below for a comparison of the content of both POMs. + +### Model version 4.1.0 + +With now having two types of POM Maven 4 can already make additions to the Build-POM as it will only be used by Maven ( +and of course IDEs). +Therefore, with Maven 4 a new Model version 4.1.0 is introduced. +This version introduces some new elements and attributes, while others got marked as deprecated. +To not break the ecosystem this version is only available for the Build-POM, while the Consumer-POM will still use +version 4.0.0. +This means Maven will generate the Consumer-POM during the build. + +**Note**: Maven 4 will of course continue to build your model version 4.0.0 project! +There is no need to update your POMs to 4.1.0 as long as you don't want to make use of the new features. +But as like every software update - it's suggested to update them to 4.1.0, e.g. to avoid problems when deprecated +things get removed in future updates. + +### Modules are now subprojects + +From the early days of Maven 1 till today, all build information is stored in the POM, short for "Project Object Model". +Together with build folders and other files the wording "Maven project" is used. +However, project containing multiple parts, e.g. an API and a client, each of those parts was called "module" and listed +in the `<modules>` section of the POM, leading to the terms of "multi-module project". +This wording introduced some inconsistency, especially as projects with any `<modules>` section are often called " +single-module". +Since the introduction of the [Java Platform Module System][3] in Java 9 the term "module" raised additional confusion. + +Maven 4 gets rid of this by naming "modules" as what they are - subprojects. +Model version 4.1.0 contains a new element `<subprojects>`analogous to the now deprecated, but still usable, element +`<modules>`. + +**Note**: It's suggested to use the terms `multi-project setup` and `single-project setup` to differentiate between a +Maven project with or without subprojects. + +### New packaging type: bom + +Maven 4 introduces a dedicated packaging type to provide a [Bill of Material BOM][4] called "bom" to differentiate more +precisely between "parent POMs" and dependency managing BOMs. +While the new type is only available with model Version 4.1.0 the final outcome is a full Maven 3 compatible (model +4.0.0) POM file! +For an example see the link above or +the [live coding by Maven maintainer Karl Heinz Marbaise at IntelliJ IDEA Conf 2004][5]. + +**Note**: With Maven 4 it's also possible to exclude dependencies which are declared by BOMs using the existing +`<exclusions>` element. +Also note that in Maven4 importing BOMs with classifier is now possible. +Therefore, Maven team suggests that projects BOMs be generated as classified artifacts (see Maven build "skinny" vs " Review Comment: The clarification helps me a lot, thanks @Bukama and @cstamas! > Information about "What's new in Maven 4?" > ------------------------------------------ > > Key: MNGSITE-550 > URL: https://issues.apache.org/jira/browse/MNGSITE-550 > Project: Maven Project Web Site > Issue Type: Improvement > Reporter: Matthias Bünger > Priority: Major > > A comprehensive article/list of the important changes in Maven 4 is needed. > ---- > > Issue based on the slack message / thread, started by [~cstamas] > {quote} > More and more times we get questions like "and what is new in Maven4?". We > have no document that distills the relevant changes. Could someone try to > collect that in cwiki or somewhere? > {quote} -- This message was sent by Atlassian Jira (v8.20.10#820010)