slachiewicz opened a new issue, #12709:
URL: https://github.com/apache/maven/issues/12709

   ### Description
   
   We have quietly ended up with a wide spread of minimum Maven versions across 
the plugins and shared components, and the stragglers are now costing us more 
than the compatibility they buy. This proposes agreeing a floor and moving the 
remainder to it.
   
   ### Where we actually are
   
   Counting the `<mavenVersion>` property across the plugin and shared 
repositories in a full local checkout — 65 projects declare one:
   
   | baseline | projects |
   |---|---|
   | 3.9.16 | 31 |
   | 4.0.0-rc-6 | 7 |
   | 3.9.12 | 7 |
   | 3.9.9 / 3.9.11 / 3.9.14 / 3.9.15 | 5 |
   | **3.6.3** | **13** |
   | **3.2.5** | **1** (`shared/shared-utils`) |
   
   So two thirds have already moved to 3.9.x or later, without anything being 
coordinated. The remaining fourteen are the outliers, not the norm.
   
   Still on 3.6.3: maven-site-plugin, maven-changes-plugin, 
maven-checkstyle-plugin, maven-scm-publish-plugin, maven-stage-plugin, 
maven-scm-plugin, common-artifact-filters, dependency-tree, mapping, 
reporting-exec, shared-incremental, shared-io, shared-jar. Plus shared-utils on 
3.2.5.
   
   ### Why it is worth doing, concretely
   
   The clearest cost is `maven-compat`. Several projects carry a test-scoped 
dependency on it while importing nothing from it — one of them with a `@TODO 
remove!!` on the line. It cannot simply be deleted, and the reason is not in 
the plugins:
   
   `maven-core` 3.6.3 ships `DefaultProjectBuildingHelper` with a field of the 
legacy `org.apache.maven.repository.RepositorySystem`, whose only 
implementation lives in maven-compat. So any test that looks up a Mojo needing 
`ProjectBuilder` fails without it, with zero compat code in the plugin:
   
   ```
   No implementation for org.apache.maven.repository.RepositorySystem was bound.
     while locating org.apache.maven.project.DefaultProjectBuildingHelper
   ```
   
   `maven-core` changed that field to 
`org.apache.maven.bridge.MavenRepositorySystem` in **3.9.12** exactly — commit 
`3afbdb8f76`, and `git tag --contains` gives `maven-3.9.12` as the first 
release carrying it. Verified against the bytecode:
   
   ```
   maven-core 3.9.11   org.apache.maven.repository.RepositorySystem 
repositorySystem
   maven-core 3.9.12   org.apache.maven.bridge.MavenRepositorySystem 
repositorySystem
   ```
   
   So for these projects, "remove maven-compat" and "raise the baseline to 
3.9.12" are the same task. Two are proposed already, both verified with no 
behaviour change:
   
   - apache/maven-javadoc-plugin#1356 — 69 tests, 1 failure, identical to 
master under the same command
   - apache/maven-remote-resources-plugin#292 — 10 tests, 0 failures, identical 
to master
   
   ### What a floor would settle
   
   1. **Which version.** 3.9.12 is the lowest that solves the maven-compat 
problem. 3.9.16 is where most projects already are and would need no work for 
31 of them. Either is defensible; picking one and writing it down is the point.
   2. **Whether it is per-project or a policy.** 
`<prerequisites><maven>${mavenVersion}</maven></prerequisites>` means each bump 
is user-visible, so this is not purely internal.
   3. **What to do with the `@TODO remove!!` comments.** Right now they imply 
someone forgot, when in fact the removal is blocked on a decision nobody has 
taken.
   
   ### The honest counter-argument
   
   For the maven-compat cases specifically, **doing nothing is defensible.** 
The dependency is test-scoped, never ships, and costs users nothing. If we are 
not ready to move the floor, that is a legitimate answer — but then the TODOs 
should say "blocked on baseline policy" rather than implying an oversight.
   
   What is not defensible is the current state: fourteen projects sitting on a 
baseline the other fifty-one have already left, with no recorded reason.
   
   ### Not in scope here
   
   `shared-utils` at 3.2.5 and `shared-io` are separate conversations — a wider 
survey found `shared-io`'s only remaining consumer in the tree is a single 
integration-test fixture, so its baseline may be moot.
   


-- 
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: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to