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-Nameno 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.jsonEstraté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.javaao seu módulo superior - Declare
requirespara 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-Namepara obter nomes estáveis - Fique atento a pacotes divididos e ao acesso por reflexão; use
jdepspara 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
- module-info.java
- requires e exports
- Serviços com provides/uses
- Migrando para módulos