Bukama commented on code in PR #598: URL: https://github.com/apache/maven-site/pull/598#discussion_r1898872695
########## 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 tools in the Java world. +Throughout the years, one important rule has been maintaining the highest backward compatibility possible, especially +with its [POM-schema with Model version 4.0.0][2], used not only for the build itself but also by consumers. +This made Maven more than a tool; it became a whole ecosystem with many dependencies on the POM, especially the Maven +Central repository, other build tools, and IDEs. + +> "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 for changes which are impossible nowadays, like a completely new build schema. + +Another pain point of Maven 3 is a codebase with a lot of deprecated, convoluted, and duplicate code +which costs the developers who maintain Maven a lot of time. +This means that the Maven codebase contains not only old Java code but also old dependencies and poor 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, Model version 4.0.0 is used not only by the build but also by consumers of the +artifact. +However, several parts of the POM are only necessary for the build while others, like the dependencies, are also +needed by the consumers. +Maven 4 will therefore differentiate between a "Build-POM" and a "Consumer-POM". +As the names suggest, the "Build-POM" will contain all information needed to build the artifact, e.g., applied plugins +and their configuration, while the "Consumer-POM", which is created during the Maven build, only contains what is +necessary. +This POM will only keep what is 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 two types of POM, Maven 4 can make additions to the Build-POM as it is only be used by Maven. +Therefore, with Maven 4, a new Model version 4.1.0 is introduced. +This version adds some new elements and attributes, while others are 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. +Maven generates the Consumer-POM during the build from the build POM. + +**Note**: Maven 4 will 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. + +### Modules are now subprojects + +From the early days of Maven 1 until 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, for projects containing multiple parts, e.g., an API and a client, each of those parts was called a "module" +and listed in the `<modules>` section of the POM, leading to the terms "multi-module project". +This wording introduced some inconsistency, especially as projects without any `<modules>` section are often called " +single-module". +Since the introduction of the [Java Platform Module System][3] in Java 9, the term "module" has 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 `<subprojects>` element analogous to the now deprecated, but still usable, +`<modules>` element. + +**Note**: 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 Materials 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 Review Comment: Rephrased -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: [email protected] For queries about this service, please contact Infrastructure at: [email protected]
