quinta-feira, 21 de setembro de 2017

☕ Java 9: módulos, JPMS e a maior mudança estrutural do Java

Lançado em 21 de setembro de 2017, o Java 9 não ficou marcado por pequenas melhorias de sintaxe, mas por algo muito maior:

a introdução do sistema de módulos da plataforma Java, conhecido como JPMS (Java Platform Module System).

Essa foi, sem dúvida, a mudança mais profunda na estrutura do Java desde o seu nascimento.


📌 O contexto antes do Java 9

Antes do Java 9:

  • A JDK era um grande bloco monolítico

  • Todas as APIs ficavam visíveis para qualquer aplicação

  • Não havia encapsulamento real entre bibliotecas internas

  • Dependências transitivas eram difíceis de controlar

Isso funcionou por muitos anos, mas começou a gerar:

  • Aplicações grandes demais

  • Problemas de manutenção

  • Uso indevido de APIs internas

O Java 9 veio para resolver exatamente isso.


📦 O que é o JPMS (Java Platform Module System)?

O JPMS introduziu o conceito de módulos no Java.

Um módulo:

  • Declara explicitamente o que expõe

  • Define suas dependências

  • Controla o acesso às suas APIs

Tudo isso é feito por meio do arquivo:

module-info.java

Esse arquivo descreve:

  • Quais pacotes são exportados

  • Quais módulos são requeridos

  • O que fica encapsulado


🚀 Principais novidades do Java 9

🧱 Modularização da própria JDK

A JDK deixou de ser um bloco único.

Com o Java 9:

  • A JDK foi dividida em módulos

  • APIs internas passaram a ser encapsuladas

  • Acesso indevido começou a gerar avisos e erros

Isso aumentou a segurança e a previsibilidade da plataforma.


🔐 Encapsulamento forte

Antes do Java 9, era comum acessar APIs internas do Java.

Com o JPMS:

  • APIs internas deixaram de ser acessíveis por padrão

  • O uso indevido passou a ser desencorajado

  • Muitas aplicações precisaram ser ajustadas

Esse foi um impacto grande, especialmente em sistemas antigos.


⚠️ Impacto em bibliotecas e frameworks

O Java 9 forçou o ecossistema a amadurecer.

Frameworks tiveram que:

  • Abandonar APIs internas

  • Corrigir acessos ilegais

  • Atualizar suas dependências

Esse processo foi doloroso no início, mas necessário para o futuro do Java.


📦 jlink: JDKs sob medida

O Java 9 introduziu o jlink, permitindo:

  • Criar runtimes Java customizados

  • Incluir apenas os módulos necessários

  • Reduzir tamanho e superfície de ataque

Isso abriu caminho para:

  • Aplicações mais leves

  • Melhor uso em containers e cloud


🧠 Melhor gerenciamento de dependências

Com módulos, o Java passou a:

  • Detectar dependências ausentes em tempo de execução

  • Evitar conflitos de versões

  • Tornar erros mais explícitos

Embora o Maven e o Gradle continuem sendo essenciais, o JPMS trouxe mais rigor estrutural.


📜 Outras melhorias do Java 9

Além dos módulos, o Java 9 trouxe:

  • Métodos de fábrica imutáveis para coleções (List.of, Set.of)

  • Melhorias em Streams

  • REPL interativo (JShell)

  • Ajustes importantes na JVM

Essas mudanças melhoraram bastante a experiência do desenvolvedor.


🧠 O impacto real do Java 9

O Java 9:

  • Não foi adotado em massa como o Java 8

  • Teve impacto mais estrutural do que funcional

  • Preparou o Java para o futuro

Muitos projetos pularam o Java 9, mas todos sentiram seus efeitos.


📌 Java 9 e o caminho para o Java moderno

O Java 9:

  • Inaugurou o ciclo de lançamentos frequentes

  • Forçou limpeza e organização do ecossistema

  • Criou a base para versões LTS mais estáveis

Sem o Java 9, o Java moderno simplesmente não existiria.


📝 Conclusão

O Java 9 não foi uma versão “agradável”, mas foi necessária.

Com o JPMS, o Java:

  • Ganhou estrutura 🧱

  • Ganhou encapsulamento 🔐

  • Ganhou maturidade 📦

Ele pode não ter sido amado, mas foi essencial.