Não exatamente.
JEP 247: Compile for Older Platform Versions define esta nova opção de linha de comando--release
:
Definimos uma nova opção de linha de comando --release
, que configura automaticamente o compilador para produzir arquivos de classe que serão vinculados a uma implementação da versão de plataforma fornecida. Para as plataformas predefinidas em javac
, --release N
é equivalente a-source N -target N -bootclasspath <bootclasspath-from-N>
. (ênfase minha)
Então não, não é equivalente a -source N -target N
. O motivo desta adição é declarado na seção "Motivação":
javac
fornece duas opções de linha de comando -source
e -target
, que podem ser usadas para selecionar a versão da linguagem Java aceita pelo compilador e a versão dos arquivos de classe que ele produz, respectivamente. Por padrão, entretanto, javac
compila com a versão mais recente das APIs da plataforma. O programa compilado pode, portanto, usar acidentalmente APIs disponíveis apenas na versão atual da plataforma. Esses programas não podem ser executados em versões anteriores da plataforma, independentemente dos valores passados para -source
e -target
. opções. Este é um ponto problemático de usabilidade de longo prazo, uma vez que os usuários esperam que, ao usar essas opções, obtenham arquivos de classe que podem ser executados na versão de plataforma especificada.
Resumindo, especificar as opções de origem e destino não são suficientes para compilação cruzada. Como javac
, por padrão, compila com base nas APIs mais recentes da plataforma, não é possível garantir que sejam executados em versões mais antigas. Você também precisa especificar a -bootclasspath
opção correspondente à versão mais antiga para fazer a compilação cruzada corretamente. Isso incluiria a versão correta da API para compilar e permitir a execução na versão mais antiga. Como era esquecido com frequência, foi decidido adicionar uma opção de linha de comando que fazia todas as coisas necessárias para uma compilação cruzada correta.
Leituras adicionais na lista de discussão e Oracle Docs . O bug original foi arquivado aqui . Observe que, desde a integração desta opção, as compilações JDK vêm agrupadas com descrições das APIs da plataforma de versões mais antigas, mencionadas na seção "Riscos e suposições". Isso significa que você não precisa da versão mais antiga instalada em sua máquina para que a compilação cruzada funcione.