Create GlobalMentor bill of materials (BOM) POMs.
As discussed in JAVA-201, the globalmentor-parent POM (recently split out to another repository in ) is getting too much to manage; anything that changes in globalmentor-base requires globalmentor-parent to be updated for all the child repositories.
If we put the dependencies now managed by globalmentor-parent into a bill of materials (BOM) POM, then child projects could descend directly from globalmentor-base. Then if globalmentor-base changes, the child projects could simply update to the latest globalmentor-base without needing to update some intermediate repository. If course we could always update the BOM when needed, but it wouldn't be an immediately requirement.
It might be a good idea to have more than one BOM:
globalmentor-bom-parent: The parent project for all the BOMs (in that same repository).
globalmentor-bom-infrastructure: The cross-cutting concern libraries that are currently in globalmentor-parent. (Perhaps globalmentor-bom-cross or some other shorter word might be a better choice.)
globalmentor-bom-ee: The EE-related dependencies from JAVA-201. (Then globalmentor-ee could simply import globalmentor-bom-ee, improving the changes made in JAVA-201.
An argument could be made that we don't even need a BOM, because if each project includes the latest version of e.g. Csar and then performs a version check before release, it will be evident that an older version is being used. Having a single dependency that lists all of the latest versions may be useful, but then there is the overhead of keeping that dependency up-to-date; it's unclear if the benefits outweigh overhead.
We should put globalmentor-ee-bom inside globalmentor-ee. But would we want to update globalmentor-ee everytime we update the BOM? But maybe we should update globalmentor-ee each time we update the BOM.
But we really can't put globalmentor-cross-bom in globalmentor-base, because many of the cross-cutting library descend from globalmentor-base. There would be the chicken-and-egg problem of updating globalmentor-base with an old version of the cross-cutting libraries because the newer versions couldn't be released before globalmentor-base is.
Should these be named globalmentor-bom-xxx or globalmentor-xxx-bom? Probably the latter.