It has been mentioned before, but just to add, since the bytecode
level is IMHO the smallest problem:

Jorge Solórzano wrote on 25. Feb 2024 00:41 (GMT +01:00):
> you can use JDK 17 to produce Java 8 bytecode using Java 8
> features, that is the distinction I made between runtime and build time,
> but it looks it's still not clear.

In the past a newer JDK version could compile for an older Bytecode version and
compatible with the source code constructs, BUT it used its own classlibrary 
which
had usually different method and therefore create NON-compat results. For that
reason you had to provide the old bootpath if you wanted a clean build (or, 
since this
Is nearly the same work than just using the old JDK always use the same 
build/target
Version, this was very typical for java7 builds and many think it is needed for 
8 as well).

But, this is no longer a problem since Java9, the new -release option does not 
only simplify
-source and -target into a single option it additionally makes the Java 
compiler use an
internal list of approved JCL signatures, therefore being save for cross 
compile (only
If you switch to the new flag).

Unfortunatelly -release 8 has still problems with removed libraries, so it is a 
bit of a
work to use newer JDKs to compile old codebase (not a drop-in in some cases 
like jaxb).

Btw Java8 POMs are a bit annoying since you can’t build them on Java 8
With maven.compiler.release and you can’t (should not) build them on 9+ with
maven.compiler.target. Luckily you can solve that with a profile activated by 
runtime version.
https://maven.apache.org/plugins/maven-compiler-plugin/examples/set-compiler-release.html

Gruß
Bernd
— 
https://bernd.eckenfels.net

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

Reply via email to