Pular para conteúdo

0016 — Bump major: Java 25 + Micronaut 5

Status: Aprovado · Responsável: Gustavo Madruga · Atualizado em: 2026-07-06 · Decidido em: 2026-07-06

Contexto

O projeto estava em Java 21 / Micronaut 4.7.6 — uma major atrás. O salto para Micronaut 5 exige Java 25 baseline (o plugin io.micronaut.application 5 exige) e traz breaking changes que não são óbvios no diff. Registrar aqui evita que o próximo bump redescubra cada um na marra.

Decisão

Subir para Java 25 + Gradle 9.5.1 + Micronaut 5.0.2 (plugin 5.0.0). docs/app.json declara toolchain.java=25; o Dockerfile usa eclipse-temurin:25. No WSL o JDK é gerenciado via SDKMAN (GraalVM 25). Efeitos colaterais resolvidos no mesmo trabalho:

  • micronaut-jackson-databind (reflexivo, removido do BOM) → micronaut-serde-jackson (serde build-time, Jackson 3 tools.jackson.*) — exigiu @Serdeable nos DTOs e migração de CoolifyClient + ConformidadeTest para Jackson 3.
  • ViewModelProcessor virou 2-arg (GlobalViewModel).
  • ConnectionOperations ganhou managesConnection.
  • Testcontainers precisa de versão explícita (o BOM parou de propagar).
  • AWS SDK ≥2.30 liga flexible checksums (CRC32) que o Garage rejeita → RequestChecksumCalculation.WHEN_REQUIRED no S3ClientFactory.

Atenção operacional: o Gradle 9.5.1 exige Java ≤25 e não roda em JDK futuro não suportado — se JAVA_HOME apontar para JVM que ele não reconhece, o build falha com IllegalArgumentException: <versão>.

Consequências

  • Stack atual, CVEs corrigidos, baseline alinhado ao framework e ao irmão bi-transporte-xls.
  • Exige PostgreSQL 18+ e Flyway 12+ (já pré-requisitos da stack).
  • CI/Docker (temurin:25) validado no deploy; contrato do export canônico preservado (gate: ConformidadeTest).

Alternativas consideradas

  • Ficar no último 4.x (Java 21): pega CVEs sem exigir Java 25, mas adia o inevitável e não destrava os primitivos do MN5. Foi o passo intermediário; seguimos para o 5 por ser a base alvo da casa.