Pas exactement.
JEP 247: Compiler pour les Anciennes Versions de Plate-forme définit cette nouvelle option de ligne de commande, --release
:
Nous avons défini une nouvelle option de ligne de commande, --release
, qui configure automatiquement le compilateur pour produire des fichiers de classe qui permettra de relier à l'encontre d'une mise en œuvre de la plateforme en version. Pour les plates-formes prédéfinies en javac
, --release N
est équivalent à -source N -target N -bootclasspath <bootclasspath-from-N>
. (l'emphase est mienne)
Donc non, il n'est pas équivalent à -source N -target N
. La raison pour cela est indiqué dans la "Motivation" de la section:
javac
fournit deux options de ligne de commande, -source
et -target
, qui peut être utilisée pour sélectionner la version du langage Java, accepté par le compilateur et la version de la catégorie fichiers qu'il produit, respectivement. Cependant, par défaut, javac
compile contre la version la plus récente de la plate-forme Api. Le programme compilé peut donc utiliser accidentellement Api disponible uniquement dans la version actuelle de la plate-forme. De tels programmes ne peuvent pas fonctionner sur d'anciennes versions de la plate-forme, quelles que soient les valeurs transmises à l' -source
et -target
. des options. C'est un à long terme de la convivialité de la douleur, puisque les utilisateurs attendent que par l'utilisation de ces options, ils obtenir des fichiers de classe qui peuvent s'exécuter sur la plate-forme spécifiée version.
En bref, en précisant la source et cible les options ne sont pas suffisantes pour la cross-compilation. Parce qu' javac
, par défaut, compile contre la plus récente de la plate-forme Api, ils ne peuvent pas être garantis pour fonctionner sur des versions plus anciennes. Vous devez également indiquer le -bootclasspath
correspondant à l'ancienne version de cross-compiler correctement. Cela permettrait de comprendre la bonne version de l'API pour compiler contre et permettre l'exécution de l'ancienne version. Depuis qu'il a été très souvent oublié, il a été décidé d'ajouter une option de ligne de commande qui a fait toutes les choses nécessaires pour correctement cross-compiler.
Plus de lecture dans la liste de diffusion et Oracle Docs. L'origine du bug a été déposée ici. Notez que depuis l'intégration de cette option, JDK versions ont livrés avec des descriptions de la plate-forme Api de versions plus anciennes, mentionné dans la section "Risques et Hypothèses". Cela signifie que vous n'avez pas besoin de l'ancienne version installée sur votre machine pour la cross-compilation de travail.