Le ven. 16 août 2024 à 09:51, Andreas Sewe <andreas_s...@buildingblobs.com> a écrit : > > Hi, > > just a long term Maven user here, but I'd like to chime, as I don't > think renaming module to subproject is that big an improvement. In fact, > it may actually lead to *more* confusion. Here's why: > > Maven has two *orthogonal* ways how to projects can relate to each > other: aggregation and inheritance. > > As they are frequently used together, terminology is unfortunately often > used in a somewhat sloppy fashion, even within the official > documentation (example below). As they are distinct concepts, however, I > think it is important to be precise. > > When explaining Maven aggregation and inheritance to a co-worker, I > hence use the following glossary (my own, not in any way official): > > - *project*: > Anything that has a POM (whose root element is /project) > > - *aggregator* (project): > A POM with non-empty /project/modules element > (always has /project /packaging = "pom")
Aggregator is also used to refer to a project which “aggregates” multiple standalone projects: * https://docs.redhat.com/en/documentation/red_hat_jboss_fuse/6.3/html/developing_and_deploying_applications/develop-aggregator * https://www.smartics.eu/confluence/pages/viewpage.action?pageId=24511533 If we keep aggregator/module, we may have to find another term for these kind of projects. > > - *module*: > A POM referenced by an aggregator project > (note that the same POM may be referenced by multiple aggregators, > e.g., to select different "slices" of projects to build) > > - *child* (project): > A POM with /project/parent element > > - *parent* (project): > A POM referenced by a child project > (always has /project/packaging = "pom") > > Subject to the constraint that some projects must have packaging "pom", > you can combine these, so you may have a child module, i.e., a project > that is both a child project and a module (albeit not necessarily with > the same project as parent and aggregator, respectively). Nice glossary, we should be able to leverage that. > But as I said, even the official documentation is not always that > precise. An example from the maven-site-plugin's FAQ [1]: > > > Why don't the links between parent and child modules work when I run > > "mvn site"? > > > > What "mvn site" will do for you, in a multi-project build, is to run > > "mvn site" for the parent and all its modules individually. The > > links between parent and child will not work here. > > It really should be "*aggregator* and all its modules". Also, there may > be both links from an aggregator to its modules (/site/body/menu/@ref = > "modules") *and* from a child to its parent (/site/body/menu/@ref = > "parent"). > > Coming back from this tangent to Martin's proposal, I don't think using > the term "Maven sub-project" improves things. In fact, it makes it even > easier to mistake a module (aggregation) for a child project > (inheritance), as the difference between sub-project and child project > is very subtle. > > I would hence restrict the use of "sub-something" to inheritance (think > "sub-class") and never use it to discussion aggregation. In particular, > "submodule" is really redundant, as a module is always below an > aggregator by definition.) > > What I would have rather like to see is the following: > > 1. Some kind of glossary (maybe as part of the POM Reference [2], which > ATM discussion these terms in only passing) > > 2. More rigor when talking about modules vs. children in the official > documentation. (Would be willing to create PRs once an official > glossary exists that the PRs can follow.) > IMHO, this would avoid a lot more confusion than a hypothetical mixup of > Maven modules with JPMS modules. (FWIW, my past Maven projects have > build JPMS modules, OSGi bundles, NetBeans modules, Eclipse plug-ins and > more without much confusion.) > > Just my 2 cents. > > Best wishes, > > Andreas > > [1] > < https://maven.apache.org/plugins/maven-site-plugin/faq.html#Why_dont_the_links_between_parent_and_child_modules_work_when_I_run_mvn_site > > [2] <https://maven.apache.org/pom.html#Inheritance> > > --------------------------------------------------------------------- > To unsubscribe, e-mail: dev-unsubscr...@maven.apache.org > For additional commands, e-mail: dev-h...@maven.apache.org > -- ------------------------ Guillaume Nodet