quarta-feira, 8 de setembro de 2021

🆕🔢 Um Novo Esquema de String de Versão para o JDK 9

🆕🔢 Um Novo Esquema de String de Versão para o JDK 9

Uma mudança significativa foi proposta para o JDK 9: um novo formato de string de versão. Este novo esquema foi projetado para ser facilmente compreensível por humanos e máquinas, atender aos requisitos atuais e futuros de versionamento e seguir as práticas recomendadas da indústria de software.


🎯 Por que Mudar?

O formato de versão atual do JDK (JDK 8 e anteriores) tem várias limitações que se tornaram aparentes ao longo dos anos. A versão $MAJOR.$MINOR.$SECURITY não é flexível o suficiente para os novos ciclos de lançamento mais rápidos. Além disso, a string de versão 1.8.0_92 é semanticamente incorreta, pois o 1.8 não é mais um 'major version' no sentido convencional.

O novo esquema visa resolver essas questões, oferecendo uma estrutura clara para os próximos anos.


📦 O Novo Formato

O novo formato de string de versão segue a seguinte estrutura geral:

$MAJOR.$MINOR.$SECURITY.$PATCH

Onde:

  • $MAJOR: A versão principal. Será incrementado quando mudanças significativas e incompatíveis forem feitas (por exemplo, JDK 9, JDK 10).
  • $MINOR: A versão menor. Será incrementado para lançamentos de funcionalidades que não quebram compatibilidade.
  • $SECURITY: A versão de segurança. Será incrementado para atualizações de segurança críticas.
  • $PATCH: A versão de patch. Será incrementado para correções de bugs não relacionados à segurança.

🔧 Exemplos Práticos

Suponha que a primeira versão do JDK 9 seja lançada. Suas strings de versão poderiam evoluir da seguinte forma:

9.0.1.0  // Versão inicial
9.0.1.1  // Corrigido um bug de inicialização (patch)
9.0.2.0  // Aplicado um patch de segurança crítico
9.1.0.0  // Adicionado um novo recurso compatível (minor release)

Para o JDK 10, a sequência recomeçaria:

10.0.0.0 // Versão principal inicial

⚙️ Impacto para Desenvolvedores

A API java.lang.Runtime.Version foi estendida para analisar e representar este novo formato. Desenvolvedores que analisam programaticamente a string de versão devem migrar para esta API.

Exemplo de uso:

Runtime.Version ver = Runtime.version();
System.out.println("Major: " + ver.major());
System.out.println("Minor: " + ver.minor());
System.out.println("Security: " + ver.security());
System.out.println("Patch: " + ver.patch());

Essa mudança também afeta propriedades do sistema como java.version, java.runtime.version e java.vm.version, que agora refletirão o novo esquema.


✅ Conclusão

A adoção deste novo esquema de versionamento é um passo importante para modernizar o ciclo de vida de lançamento do JDK. Ele proporciona a clareza e a flexibilidade necessárias para os futuros lançamentos mais ágeis e previsíveis, beneficiando tanto os mantenedores quanto os usuários finais da plataforma Java.

Esta mudança estabelece uma base sólida para o versionamento do JDK nos próximos anos, alinhando-o com as melhores práticas da indústria.