Non esattamente.
JEP 247: Compile for Old Platform Versions definisce questa nuova opzione della riga di comando--release
:
Abbiamo definito una nuova opzione della riga di comando --release
, che configura automaticamente il compilatore per produrre file di classe che si collegheranno a un'implementazione della versione della piattaforma data. Per le piattaforme predefinite in javac
, --release N
è equivalente a-source N -target N -bootclasspath <bootclasspath-from-N>
. (enfasi mia)
Quindi no, non è equivalente a -source N -target N
. Il motivo di questa aggiunta è indicato nella sezione "Motivazione":
javac
fornisce due opzioni della riga di comando -source
e -target
, che possono essere utilizzate per selezionare la versione del linguaggio Java accettata dal compilatore e la versione dei file di classe che produce, rispettivamente. Per impostazione predefinita, tuttavia, viene javac
compilato con la versione più recente delle API della piattaforma. Il programma compilato può quindi utilizzare accidentalmente API disponibili solo nella versione corrente della piattaforma. Tali programmi non possono essere eseguiti su versioni precedenti della piattaforma, indipendentemente dai valori passati a -source
e -target
. opzioni. Questo è un punto dolente per l'usabilità a lungo termine, poiché gli utenti si aspettano che utilizzando queste opzioni otterranno file di classe che possono essere eseguiti sulla versione della piattaforma specificata.
In breve, specificare le opzioni di origine e destinazione non è sufficiente per la compilazione incrociata. Poiché javac
, per impostazione predefinita, viene compilato con le API della piattaforma più recenti, non è possibile garantirne l'esecuzione su versioni precedenti. È inoltre necessario specificare l' -bootclasspath
opzione corrispondente alla versione precedente per eseguire correttamente la compilazione incrociata. Ciò includerebbe la versione API corretta per la compilazione e consentire l'esecuzione sulla versione precedente. Poiché molto spesso è stato dimenticato, è stato deciso di aggiungere un'opzione della riga di comando che ha fatto tutte le cose necessarie per eseguire correttamente la compilazione incrociata.
Ulteriori letture nella mailing list e Oracle Docs . Il bug originale è stato archiviato qui . Si noti che dall'integrazione di questa opzione, le build JDK sono state fornite in bundle con le descrizioni delle API della piattaforma delle versioni precedenti, menzionate nella sezione "Rischi e presupposti". Ciò significa che non è necessaria la versione precedente installata sulla macchina affinché la compilazione incrociata funzioni.