I may do some cross-compilations for legacy projects and I noticed with recent JDKs that we are limited to some specific versions for the source
, target
and release
JVM arguments.
How to get the supported versions for these arguments ?
Indeed the supported values depend on the major JDK version used.
You can find the information on the javac
documentation of the respective major JDK versions (the links are referenced below).
Some general notes about these arguments :
The
source
and thetarget
version in the Maven configuration should not be superior to the JDK version used.
A older version of the JDK cannot compile with a more recent version since it doesn't know its specification.Beware : while a recent JDK can accept as
source
compilation an older Java version, it doesn't mean that you can select assource
any supported recent version and astarget
any older version that is documented as supported (see below).
In indeed, Java versions may introduce new features that were not designed to be compatible with older Java version at compile time/run time.
For example a JDK 11 can compile classes with 8 assource
compiler version. By choosing also 8 astarget
compiler version, compilation will pass.
But if you change your mind and that you want to compile with 11 assource
and 8 astarget
, compilation will fail.
That is not always explicitly documented in the javac documentation.The
release
argument exists from Java 9.As the
source
and thetarget
are the same, therelease
argument should be favored oversource
andtarget
. It is shorter to specify and it ensures a better cross compilation compatibility and whatever even if you don't do cross compilations, it will not hurt.
For more explanations please refer to this excellent answer.
source/target/release supported versions :
- supported
source
:
1.3, 1.4, 1.5 (also 5), 1.6 (also 6), and 1.7 (also 7).
- supported
target
:
1.1, 1.2, 1.3, 1.4, 1.5 (also 5), 1.6 (also 6), and 1.7 (also 7).
- supported
source
:
1.3, 1.4, 1.5 (also 5), 1.6 (also 6), 1.7 (also 7), and 1.8 (also 8).
- supported
target
:
1.1, 1.2, 1.3, 1.4, 1.5 (also 5), 1.6 (also 6), 1.7 (also 7), and 1.8 (also 8).
- supported
source
:
1.6 (also 6), 1.7 (also 7), 1.8 (also 8), and 9.
- supported
target
:
1.6 (also 6), 1.7 (also 7), 1.8 (also 8) and 9.
- supported
release
:
6, 7, 8, and 9.
- supported
source
:
1.6 (also 6), 1.7 (also 7), 1.8 (also 8), 9, and 10.
- supported
target
:
1.6 (also 6), 1.7 (also 7), 1.8 (also 8), 9 and 10.
- supported
release
:
6, 7, 8, 9, and 10.
- supported
source/target/release
:
6, 7, 8, 9, 10, and 11.
You could have more details in the javac documentation for JDK 1.8, JDK 9, JDK 10 and JDK 11
© 2022 - 2024 — McMap. All rights reserved.