On Mon, Feb 26, 2024 at 7:24 PM Benjamin Marwell <bmarw...@apache.org> wrote:
>
> > 1. The Java version required by the project being built. That is, the
> byte code and API level of the project.
> > 2. The Java version used to compile the project.
> > 3. The Java version used to run Maven.
> > 4. The Java version used to compile and build Maven itself.
>
> > For #1, it is mandatory to support Java 8.
>
> You can compile Java 8 bytecode with a Java 8 JDK from a Maven running
> Java 17+ using toolchains
> or with the -release flag from any version 9+.
>
> > For #2, reproducible builds mean we have to be able to support what
> > customers are using and that can be anything from Java 8 - 21. It is
> > not sufficient to say Java 21 can compile to Java 8 since that does
> > not produce the same byte code as compiling with Java 8.
>
> That is the point.
> If you built the project with JDK 21 using the -release=8, you can get
> the same (reproducible) output with a similar OS and JDK 21.
>

No, that's not the point. You are claiming that #1 and #2 are the
same. I do not believe they are the same. Compiling for Java 8 with
Java 17 -release 8 is not the same as compiling with javac from JDK 8.
They do not produce the same byte code. There is a need to compile
*with* JDK 8, not just compile *for* JDK 8.

Toolchains support using JDK 8 to compile even though JDK 17 is
executing Maven, which does handle this. Unfortunately toolchains are
poorly designed, badly documented, and not widely understood within
the community. I'm trying to improve some of the docs for toolchains,
but that only goes so far. There's a fundamental problem that
toolchains are incompatible with a hermetic, one click build.

-- 
Elliotte Rusty Harold
elh...@ibiblio.org

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@maven.apache.org
For additional commands, e-mail: dev-h...@maven.apache.org

Reply via email to