You might be interested in https://basepom.github.io/
Delany

On Wed, 28 Jun 2023 at 08:40, Geoffrey De Smet <ge0ffrey.s...@gmail.com>
wrote:

> *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
>

Reply via email to