*Summary
*
Specifying the Java version (11, 17, ...)
and latest maven plugin versions (compiler 3.11.0, surefire 3.1.2,
failsafe, ...)
in every pom is a tedious and brittle.
Existing parent poms are de-standarized and bloated.
This proposal solves that by introducing
a standardized parent pom for Java 17 (and Java 11)
that sets the latest maven plugins versions.
*Motivation
*Any professional Maven build:
- has reproducible builds
- uses the latest maven plugin versions
- uses a recent Java version (not Java 5 or 8)
- specify the minimum Maven version
To that do it, users have to add 50+ lines to their pom.xml:
<properties>
<maven.compiler.release>17</maven.compiler.release>
<maven.min.version>3.9.2</maven.min.version>
<version.compiler.plugin>3.11.0</version.compiler.plugin>
<version.surefire.plugin>3.1.2</version.surefire.plugin>
<version.source.plugin>3.3.0</version.source.plugin>
<version.javadoc.plugin>3.5.0</version.javadoc.plugin>
<version.dependency.plugin>3.6.0</version.dependency.plugin>
<version.enforcer.plugin>3.3.0</version.enforcer.plugin>
...
<build>
...
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>${version.compiler.plugin}</version>
...
**
*Existing implementations*
_Superpom_
- The superpom version is not specified in the pom.xml. It's not a
reproducible build.
- The superpom does not enforce a minimum Maven version (catch 22).
- The superpom uses java 8. To overwrite it, do it for the compiler
plugin, the javadoc plugin, ...
- The superpom is not released regularly to update to the latest maven
plugin versions of compiler, surefire, failsafe, etc.
- There is no documention on how to lock in the superpom version.
Therefore, the superpom is not a solution.
_JBoss parent and Spring parent_
The JBoss parent and Spring parent poms target only their own users (=
not every Maven user) and provide a much wider scope (= bloat).
They:
- Set url and mailing lists for springframework.org or jboss.org
- Set the license
- Specify non-standarized maven plugins (spring plugin, cobertura,
injection, ...)
- Add a whole bunch of "sane for them" default plugin configuration that
overwrite the defaults of the Maven plugins.
The JBoss parent pom:
https://central.sonatype.com/artifact/org.jboss/jboss-parent/39
The Spring boot starter parent pom:
https://central.sonatype.com/artifact/org.springframework.boot/spring-boot-starter-parent/3.1.1
More importantly, these groupId are not neutral territory.
Ideally, the Jboss parent and spring parent have a parent with their
common properties.
Therefore, a 3th party parent pom is not a solution.
*Proposal
*Create a standarized, neutral parent for Java 17 that can be used as such:
<parent>
<groupId>org.apache.maven.parents</groupId>
<artifactId>parents-java-17</artifactId>
<version>2023.06.28</version>
</parent>
(Think "FROM ...:17-jre-alpine" in a Docker file.)
Similarly, there's a org.apache.maven.parents:parents-java-11 pom.
This parent pom has:
- Plugin versions defined for only and all Maven plugins of groupId
org.apache.maven.
- A compatible set of Maven plugin versions
- The latest Maven plugin versions as of 2023.06.28 (not withstanding
the previous line)
- Java set to 17
- The minimum maven set to the latest Final maven release as of 2023.06.28
*GroupId, ArtifactId and Versioning
*The groupId, artifactId and versioning are open for debate:
Proposal A: org.apache.maven.parents:parents-java-17:2023.06.28
The artifactId contains the Java number.
The version contains the release-cut-off date, so it's easy to see how
old it is.
Proposal B: org.apache.maven.parents:parents-java:17.2023.06.28
The version starts with the Java number.
The version contains the release-cut-off date, so it's easy to see how
old it is.
Proposal C: org.apache.maven.parents:parents-java-17:1.0.0
The artifactId contains the Java number.
Every release increases the major version number.
This is Apache version guidelines compatible.
Proposal D: org.apache.maven.parents:parents-java:17.1.0
The major version number is the Java number.
Every release increases the minor version number.
This is Apache version guidelines compatible.
(More proposals welcome.)
What do you think?
--
With kind regards,
Geoffrey De Smet