A proposta de melhoria do JDK 223 (JDK Enhancement Proposal - JEP) é um novo esquema para versionamento do JDK que facilita a distinção entre as versões maiores, menores e de segurança. Sendo mais simples, intuitivo, fácil de analisar e alinhar com as práticas atuais da indústria, em particular com o versionamento semântico. Por exemplo, se o JDK 1.7.0_65-b20 (7u65) usar esse novo esquema de versionamento, o texto da versão poderia ser JDK 7.6.15+20 (7.6.15).
No esquema atual de versionamento da JDK: "JDK 7 Update 65", "JDK 1.7.0_65" e "JDK 7u65" são nomes diferentes para a mesma versão. Para identificar e comparar versões, uma simples analise pontual dos padrões não é suficiente e um algoritmo mais sofisticado é necessário. O uso da letra 'u' em minúsculo também não é usado como padrão na indústria e não é uma linguagem neutra. No atual esquema de numeração do JDK, as versões menores contendo mudanças além de bugs de segurança são múltiplos de 20. As versões de segurança com base nas menores versões anteriores são números estranhos incrementados em cinco ou seis. Aqueles que não conhecem esse esquema de numeração podem pensar que o "JDK 7 Update 60" são cinco versões após o "JDK 7 Update 55" e incorretamente assumem que o primeiro tem mais correções de segurança. Essa prática de codificar as versões menores e de segurança no mesmo número não é fácil de decifrar e também resulta em saltos de muitas versões.
Os objetivos do JEP 223 são: a versão deve ser fácil de entender e fácil de analisar; deve alinhar com as práticas atuais da indústria de versionamento de semântica; deve ser adotado pelos pacotes existentes e sistemas publicados. O JEP também fornecerá uma API para analise do texto da versão, validação e comparação. Não é objetivo dessa JEP mudar os formatos de textos das versões usadas nas versões anteriores do JDK.
Um número de versão é uma sequência não vazia de números inteiros positivos separados pelos caracteres do período. Ele não contém zeros a esquerda e combina com a expressão regular [1-9][0-9]*(\.(0|[1-9][0-9]*))*. Os três primeiros elementos são $MAJOR.$MINOR.$SECURITY. O $MAJOR é incrementado para uma versão maior que contém novas funcionalidades significantes como especificadas na nova Especificação da Plataforma Java SE. O $MINOR é incrementado para as atualizações menores que podem conter correções de bugs compatíveis, revisões para padronizar APIs e funcionalidades de implementações como os novos coletores de lixo ou suporte para arquitetura de novos hardwares. O $SECURITY é incrementado para uma versão de atualização de segurança que contém correções críticas. $MINOR e $SECURITY são redefinidos com zero quando uma $MAJOR é incrementado. Um alto valor do $SECURITY para um determinado valor de $MAJOR indica uma versão mais segura, independentemente do valor de $MINOR.
Um texto de versão consiste do número de versão, opcionalmente seguido de um pré-lançamento e informação de construção. O identificador do pré-lançamento ea é para uma versão de acesso prévio (early-access) que está em desenvolvimento ativo. O número da construção é incrementado para cada construção promovida, e redefine para 1 quando qualquer porção do número de versão é incrementado. O texto da versão com elementos zeros à direita omitidos é chamado de texto de versão curta. A tabela a seguir compara os textos das versões potenciais para o JDK 9 usando os formatos atuais e propostos. Observe que os códigos existentes que assumem a versão do JDK sempre iniciam com o valor 1 deixará de funcionar corretamente.
Existente Proposto Tipo Lançamento longo curto longo curto --------------------- ------------------------------ ---------------------- Acesso Prévio 1.9.0-ea-b19 9-ea 9.0.0-ea+19 9-ea Maior 1.9.0-b100 9 9.0.0+100 9 Segurança #1 1.9.0_5-b20 9u5 9.0.1+20 9.0.1 Segurança #2 1.9.0_11-b12 9u11 9.0.2+12 9.0.2 Menor #1 1.9.0_20-b62 9u20 9.1.2+62 9.1.2 Segurança #3 1.9.0_25-b15 9u25 9.1.3+15 9.1.3 Segurança #4 1.9.0_31-b08 9u31 9.1.4+8 9.1.4 Menor #2 1.9.0_40-b45 9u40 9.2.4+45 9.2.4
O JEP foi criado em 20 de outubro de 2014 e está na condição de Candidato para o lançamento do JDK 9. Para mais informações incluindo um exemplo da API Java do JDK, por favor leia o JEP 223 e Sistema de bugs do JDK (JBS) 8061493.