Re: [DISCUSS] Automatic JDK toolchain selection when running JDK is incompatible (4.1.0)
Guillaume Nodet <[email protected]> Mon, 3 Aug 2026 23:10:26 +0200
| Newsgroups | gmane.comp.jakarta.turbine.maven.devel |
|---|---|
| Message-ID | <CAA66TppwjCKF5W8A1k+R4tVP0zTpZiko4s-kyxJMUwUtQJ9KCg@mail.gmail.com> |
--0000000000004a6bcf06582af88b Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable The starting point was to be able to build old projects with Maven 4. Would enhancing mvnup to add a toolchain declaration on the project, thereby leveraging the m-toolchain-p be a better solution ? Le lun. 3 ao=C3=BBt 2026 =C3=A0 21:10, Maarten Mulders <[email protected]= rg> a =C3=A9crit : > Hi, > > Agree with Matthias. Earlier ideas on "troubleshooting common errors > through Maven Core" have been rejected for reasons like "people should > read the error messages and take corresponding action, rather than Maven > trying to diagnose or even repair it". It would be strange to now > include such features. I would prefer having clear(er) error messages if > that is the source of problem. > > Also, I see many people blindly ignore warnings, so that would > contribute to the scenario that Matthias outlined: "it works on my > machine", while in fact I ignored the warning that says Maven switched > to an auto-discovered JDK 11 that someone else on my project does not hav= e. > > Thanks, > > Maarten > > On August 3, 2026 at 17:14, Matthias B=C3=BCnger wrote: > > Hi, > > > > I'm not convinced in trying to "fix" configuration errors in users > > system/project from the "shadows". I think a clear error (and if > > possible giving information what's wrong/how to fix) supports the user > > more in really fixing the problem. Otherwise we support "it worked on > > my machine". I can also think that it's massively increasing > > maintenance effort on our side due question why it works here, but not > > there or paths to look at on different OS. > > > > Matthias > > > > Am 03.08.2026 um 14:18 schrieb Guillaume Nodet: > >> Hi all, > >> > >> I've opened a draft PR for a quality-of-life feature in Maven 4.1.0: > >> automatic JDK toolchain selection when the running JDK cannot compile > >> the > >> project's declared source/release level. > >> > >> PR: https://github.com/apache/maven/pull/12633 > >> > >> The problem > >> > >> When a project declares <maven.compiler.source>6</maven.compiler.sourc= e> > >> (or uses <release>, <targetVersion>, or compiler plugin > >> <configuration><source>), and you run Maven with JDK 21 =E2=80=94 whic= h dropped > >> --source 6 support =E2=80=94 the build fails with a cryptic javac erro= r. The > >> user > >> has to figure out they need to install a compatible JDK and either > >> configure toolchains.xml or add the maven-toolchains-plugin to their > >> build. > >> This is a frequent stumbling block, especially when maintaining older > >> projects. > >> > >> The solution > >> > >> Maven now automatically detects the incompatibility and searches for a > >> compatible JDK =E2=80=94 first in configured toolchains (toolchains.xm= l), > >> then by > >> lazily discovering JDK installations on the filesystem. If a > >> compatible JDK > >> is found, it's selected as the compilation toolchain and a warning is > >> emitted: > >> > >> [WARNING] Project requires --source 6 which is not supported by JDK 21= . > >> [WARNING] Automatically selected JDK 11 (discovered at > >> /usr/lib/jvm/java-11) for compilation. > >> > >> > >> This is a zero-cost feature: the auto-selection logic only runs when t= he > >> running JDK genuinely cannot handle the project's source level. Normal > >> builds are completely unaffected. > >> > >> Design decisions worth discussing > >> > >> 1. Filesystem discovery =E2=80=94 The discoverer scans well-known loca= tions > >> (SDKMAN, IntelliJ .jdks/, Gradle, jEnv, JBang, asdf, mise, OS-specific > >> paths like /usr/lib/jvm). Version is read from the JDK release file = =E2=80=94 no > >> java processes are spawned. This is essentially what > >> maven-toolchains-plugin's ToolchainDiscoverer does, but moved into > >> core and > >> made lazy. Does this make the plugin's auto-discovery redundant? > >> Should we > >> deprecate it? > >> > >> 2. Source level detection =E2=80=94 We read the source level from mult= iple > >> places > >> in priority order: Model 4.1.0 <source><targetVersion>, then > >> maven.compiler.release/maven.compiler.source properties, then compiler > >> plugin <configuration><release>/<source>. Is this the right > >> precedence? Are > >> there other places we should check? > >> > >> 3. "Newest compatible" strategy =E2=80=94 When multiple compatible JDK= s are > >> found, > >> we pick the newest one (highest major version that still supports the > >> required source level). The rationale is that a newer JDK gives better > >> performance and diagnostics. Should this be configurable? > >> > >> 4. Compat layer =E2=80=94 The v3 ToolchainManagerFactory bridge now pa= sses the > >> discoverer through, so plugins using the v3 API also benefit. This fel= t > >> important for the transition period. > >> > >> CI is green on all platforms (Linux/macOS/Windows =C3=97 JDK 17/21/25)= . > >> > >> Feedback and reviews welcome. > >> > >> Guillaume > >> > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: [email protected] > > For additional commands, e-mail: [email protected] > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [email protected] > For additional commands, e-mail: [email protected] > > --=20 ------------------------ Guillaume Nodet --0000000000004a6bcf06582af88b--