Bukama commented on code in PR #598:
URL: https://github.com/apache/maven-site/pull/598#discussion_r1927468031


##########
content/markdown/whatsnewinmaven4.md:
##########
@@ -0,0 +1,473 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<head>
+   <title>What's new in Maven 4?</title>
+   <meta name="author" content="Matthias Bünger" />
+</head>
+
+# 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 of
+its [POM file][2] with Model version 4.0.0.
+
+The POM file fulfills two elementary needs.
+First, the POM holds all the information and configuration, which are only 
needed to build the artifact.
+After the artifact is created, this build information is not relevant anymore.
+Second, the POM also contains information, e.g. dependencies, which are needed 
by projects which want to use the
+artifact.
+These dependent projects are called the "consumers" (of an artifact).
+
+This made the 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.
+This results in the situation that any change in the POM's schema forces each 
participant of the ecosystem to either
+adopt the change or drop support.
+Thus, the Maven POM syntax became fixed, unable to change.
+
+> "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…"
+>> &mdash; <cite>[Hervé Boutemy (in Javaadvent 2021)][1]</cite>
+
+But Maven should be able to advance.
+For this, one important thing that's needed is to separate the information 
needed for the build from the information
+needed by the consumers, but without breaking the ecosystem.
+Maven 4 prepares for this and more.
+
+This article presents and explains major changes brought by Maven 4, grouped 
into several topics.
+
+## POM Changes
+
+### Build-POM and Consumer-POM
+
+Maven 3 uses Model version 4.0.0 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 therefore differentiates between a "Build-POM" and a "Consumer-POM".
+As the names suggest, the "Build-POM" contains 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 to use an artifact as a dependency.
+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
+
+Maven 4 introduces a new POM 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.
+Version 4.1.0 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
+
+A Maven project is any Java project build with Maven.
+The [directory][33] of a Maven project contains at least the source folder, 
the test source folder and the project's POM
+file.
+A Maven project may have other Maven projects within subdirectories.
+Each project within a subdirectories is called "subproject".
+
+Example: A project A contains a subdirectory which contains its own POM file 
for project B.
+We say that B is a subproject of A.
+
+However, Maven does not build subprojects as long as they are not linked as 
such in the POM file.
+In the past this was done by listing each subproject in the `<modules>` 
section of the parent's POM.
+The inconsistent wording led to the situation that many people calling 
subprojects "modules".
+Projects which have at least one subproject are often called "multi-module 
project", while those which don't have any
+are "single-module project".
+Since the introduction of the [Java Platform Module System][3] in Java 9, the 
term "module" has raised additional
+confusion inside the Maven community.
+
+Maven 4 gets rid of this by renaming modules to projects and submodules to 
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.
+The new type is only available as a Build-POM in Model Version 4.1.0 and 
later, but Maven generates a full Maven 3
+compatible Consumer-POM during the build.
+For an example, see the link above or
+the [live coding by Maven maintainer Karl Heinz Marbaise at IntelliJ IDEA Conf 
2024][5].
+
+**Note**: With Maven 4, it's also possible to exclude dependencies that are 
declared by BOMs using the existing
+`<exclusions>` element.
+Also note that in Maven 4, importing BOMs with a classifier is now possible.
+Therefore, the Maven team suggests that project BOMs should be generated as 
classified artifacts, using the
+`<bomClassifier>` element.
+This means that an imported BOM must **not** come from the same reactor as the 
current build but be available outside
+the project before the build (in other words: you should import only external 
BOMs).
+That's why Maven 4.0 will show a warning if a BOM comes from the same reactor.
+In the future, this will most probably be changed to make the build fail.
+
+### Comparing Build-POM and Consumer-POM
+
+The following table shows a rough comparison of which content is available in 
which POM type when using Maven 4.
+
+**Notes**:
+
+* The column "Consumer-POM" does not apply to artifacts that are of type 
"pom", because "pom"-artifacts are designed to
+  contain build information, e.g. plugin configuration!
+* Some of the build-related content which is (as of now) still available in 
the Consumer-POM might be available only in
+  the Build-POM in the future.
+
+| Content                                    | Build-POM | Consumer-POM |
+|:-------------------------------------------|:---------:|:------------:|
+| Model version                              |   4.1.0   |    4.0.0     |
+| 3rd party dependency information           |     ✅     |      ✅       |
+| POM properties                             |     ✅     |      ❌       |
+| Plugin configuration                       |     ✅     |      ❌       |
+| Repository information                     |     ✅     |      ✅       |
+| Project information / environment settings |     ✅     |      ✅       |
+| Deployment to remote repository            |     ✅     |      ✅       |
+
+**Warning**: There are rare situations where Maven 4 will produce a 
Consumer-POM based on version 4.1.0, e.g., when
+condition-based profiles (see below) can't be transformed to version 4.0.0.
+Maven will show a warning in such situations.
+
+### Declaring the root directory and directory properties
+
+Every time Maven executes a build, it has to determine the project's root to 
identify things like the parent project,

Review Comment:
   Created an issue to describe the terms in a separate PR.



-- 
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: issues-unsubscr...@maven.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org

Reply via email to