No exactamente.
JEP 247: Compile for Old Platform Versions define esta nueva opción de línea de comandos--release
:
Definimos una nueva opción de línea de comandos --release
, que configura automáticamente el compilador para producir archivos de clase que se vincularán con una implementación de la versión de plataforma dada. Para las plataformas predefinidas en javac
, --release N
es equivalente a-source N -target N -bootclasspath <bootclasspath-from-N>
. (énfasis mío)
Entonces no, no es equivalente a -source N -target N
. El motivo de esta adición se indica en la sección "Motivación":
javac
proporciona dos opciones de línea de comando, -source
y -target
, que se pueden usar para seleccionar la versión del lenguaje Java aceptada por el compilador y la versión de los archivos de clase que produce, respectivamente. Sin embargo, de forma predeterminada, se javac
compila con la versión más reciente de las API de la plataforma. Por lo tanto, el programa compilado puede usar accidentalmente API que solo están disponibles en la versión actual de la plataforma. Dichos programas no pueden ejecutarse en versiones anteriores de la plataforma, independientemente de los valores pasados a -source
y -target
. opciones. Este es un problema de usabilidad a largo plazo, ya que los usuarios esperan que al usar estas opciones obtengan archivos de clase que puedan ejecutarse en la versión de plataforma especificada.
En resumen, especificar las opciones de origen y destino no es suficiente para la compilación cruzada. Debido a que javac
, de forma predeterminada, se compila con la API de la plataforma más reciente, no se puede garantizar que se ejecuten en versiones anteriores. También debe especificar la -bootclasspath
opción correspondiente a la versión anterior para realizar una compilación cruzada correctamente. Esto incluiría la versión correcta de la API para compilar y permitir la ejecución en una versión anterior. Dado que a menudo se olvidaba, se decidió agregar una opción de línea de comando que hizo todo lo necesario para realizar una compilación cruzada correcta.
Más información en la lista de correo y Oracle Docs . El error original se archivó aquí . Tenga en cuenta que desde la integración de esta opción, las compilaciones de JDK se incluyen con descripciones de las API de la plataforma de versiones anteriores, mencionadas en la sección "Riesgos y suposiciones". Eso significa que no necesita la versión anterior instalada en su máquina para que funcione la compilación cruzada.