A recente proposta de aperfeiçoamento do Java JEP 182 (Java Enhancement Proposal), direcionada para o Java 8 e Java 9, tem como objetivo modificar o modelo de suporte para as flags -target e -source usadas pelo compilador do Java. A proposta prevê que o compilador suportará no máximo três versões anteriores à do próprio compilador.
A opção -target permite que o compilador informe uma versão especifica do formato da classe Java. Tipicamente são especificadas as versões do Java, como 1.5 ou 1.6, o que especifica a versão do bytecode gerada:
- 48: Java 4
- 49: Java 5
- 50: Java 6
- 51: Java 7
- 52: Java 8 (not yet released)
- 53: Java 9 (not yet released)
A opção -source permite que o compilador reconheça, ou trate como erros, as novas estruturas da linguagem, como lambdas, try-with-resources, uso de strings no switch, entre outros. Algumas funcionalidades novas da linguagem, como lambdas, requerem o uso de funcionalidades especificas do bytecode, como o invokedynamic. Dessa forma, muitas vezes não é possível usar uma versão mais nova do que a versão alvo definida no target.
A mudança já começou; a JSR14 e a versão 1.4 não são mais aceitas no Java 8, e o uso da versão 1.5 gera avisos (warnings) do compilador. De forma análoga, o Java 9, quando liberado, irá remover o suporte à versão 1.5 e apresentar avisos para a versão 1.6.
De uma perspectiva prática, isso pode não parecer uma grande mudança; porém, até recentemente, as runtimes de OSGi ainda compilavam com o -source 1.5 e target jsr14 visando gerar códigos capazes de incorporar tipos genéricos, para compatibilidade com o J2ME. O uso da jsr14 será removido no final de 2013 do código do Eclipse. Por fim, os runtimes de OSGi, como Felix e Equinox, continuarão disponíveis enquanto houver necessidade comercial.