0Pricing
Java Academy · Aula

Migrando para módulos

Módulos automáticos e sem nome.

Migrando para módulos é uma aula grátis de Java Academy no CoddyKit. Esta é a aula 4 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Java Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Java Academy inclui 4 aulas no total.

Modularizando código existente

Poucos projetos adotam módulos desde o primeiro dia. O JPMS foi projetado para a migração gradual, permitindo que o caminho de classes e o caminho de módulos coexistam.

Os conceitos fundamentais são os módulos automáticos e o módulo não nomeado.

O módulo não nomeado

Tudo o que é carregado do caminho de classes vive no único módulo não nomeado. Ele lê todos os outros módulos e exporta todos os seus pacotes.

Essa é a ponte que mantém o código legado do caminho de classes funcionando.

Módulos nomeados não podem ler o módulo não nomeado

Uma regra crucial: um módulo nomeado explícito não pode depender do módulo não nomeado. Não é possível escrever requires para código do caminho de classes.

Por isso, faça a migração de baixo para cima: primeiro converta a forma como as dependências são representadas.

Módulos automáticos

Coloque um JAR simples (não modular) no caminho de módulos, e ele se tornará um módulo automático. Ele receberá um nome derivado automaticamente, lerá todos os outros módulos e exportará todos os seus pacotes.

Isso permite que módulos nomeados declarem requires para um JAR que ainda não tem module-info.

De onde vem o nome

O nome de um módulo automático é derivado na seguinte ordem de preferência:

  • A entrada Automatic-Module-Name no manifesto do JAR, caso esteja presente
  • Caso contrário, do nome do arquivo JAR (com a versão removida e os hífens convertidos em pontos)

Nomes estáveis são importantes

Os autores de bibliotecas devem adicionar Automatic-Module-Name ao manifesto antes de modularizar completamente. Isso garante um nome de módulo estável, para que as cláusulas requires posteriores sobrevivam ao eventual module-info real.

Automatic-Module-Name: com.example.json

Estratégia de cima para baixo

A abordagem recomendada para sua própria aplicação:

  • Mantenha as dependências como módulos automáticos no caminho de módulos
  • Adicione primeiro um module-info.java ao seu módulo superior
  • Declare requires para os nomes desses módulos automáticos

Exemplo de etapa de migração

Suponha que guava-32.jar esteja no caminho de módulos como o módulo automático com.google.common. Seu módulo de aplicação já pode declarar uma dependência dele.

module com.example.app {
    requires com.google.common;
    exports com.example.app.api;
}

Problema dos pacotes divididos

O sistema de módulos proíbe que dois módulos contenham o mesmo pacote. Bibliotecas antigas que dividem um pacote entre JARs causam erros.

Corrija isso mesclando os JARs, usando --patch-module ou atualizando para versões que eliminem a divisão.

Problemas de acesso por reflexão

Estruturas que fazem reflexão profunda podem falhar com InaccessibleObjectException depois que você modulariza o código. Adicione diretivas opens ou, como ponte temporária, use a opção de inicialização --add-opens.

Ferramenta útil para análise de dependências

A ferramenta jdeps analisa seus JARs, informa dependências, sinaliza usos de APIs internas do JDK e pode até gerar um module-info.java candidato com jdeps --generate-module-info.

Execute-a primeiro para planejar sua migração.

Verificação rápida

Relembre como um JAR simples obtém uma identidade de módulo.

Recapitulação

Você aprendeu técnicas de migração:

  • O código do caminho de classes vive no módulo não nomeado; módulos nomeados não podem declarar dependências dele
  • JARs simples no caminho de módulos se tornam módulos automáticos
  • Defina Automatic-Module-Name para obter nomes estáveis
  • Fique atento a pacotes divididos e ao acesso por reflexão; use jdeps para planejar

Isso conclui o curso de JPMS.

Perguntas Frequentes

A aula “Migrando para módulos” é grátis?

Sim — o texto completo de “Migrando para módulos” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Java Academy, atualize para CoddyKit PRO. O curso de Java Academy inclui 4 aulas no total.

O que vou aprender em “Migrando para módulos”?

Módulos automáticos e sem nome. Você pratica Java Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar Java Academy?

Nenhuma experiência prévia é necessária. Java Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 4 de 4.

Quanto tempo leva a aula “Migrando para módulos”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de Java Academy?

Sim. Cada aula de Java Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. module-info.java
  2. requires e exports
  3. Serviços com provides/uses
  4. Migrando para módulos
← Voltar para Java Academy