Introdução ao Sistema de Módulos do Java (Jigsaw)

A partir do Java 9, a plataforma Java recebeu uma das suas maiores atualizações com a introdução do sistema de módulos, também conhecido como Project Jigsaw. Este projeto teve como objetivo principal tornar o Java mais escalável para pequenos dispositivos, melhorar o desempenho, facilitar a manutenção e evolução das bibliotecas e aplicações Java, além de oferecer um sistema mais seguro e robusto em termos de encapsulamento de código.

O que são Módulos?

Um módulo é um agrupamento de código e dados que oferece uma funcionalidade completa e que pode ser compilado e distribuído de forma independente. No contexto do Java, um módulo pode conter um ou mais pacotes, e é definido por um arquivo especial chamado module-info.java. Este arquivo declara explicitamente quais os pacotes que o módulo exporta para serem utilizados por outros módulos, quais os módulos necessários para o seu funcionamento e quais serviços ele oferece ou consome.

Por que Módulos?

Antes do sistema de módulos, o Java utilizava o classpath para localizar suas classes e bibliotecas. No entanto, o classpath tinha várias desvantagens: era propenso a erros, não oferecia um meio de expressar dependências e não impunha nenhum tipo de encapsulamento forte. Com o sistema de módulos, cada módulo tem um namespace isolado, o que reduz conflitos e torna o sistema mais seguro e fácil de gerenciar.

Componentes do Sistema de Módulos

O sistema de módulos do Java é composto por vários componentes-chave:

  • module-info.java: O arquivo de definição do módulo, que contém declarações de módulos, exportações e dependências.
  • jmod: Um novo formato de arquivo que permite empacotar módulos para distribuição.
  • jlink: Uma ferramenta que permite criar imagens de tempo de execução personalizadas contendo apenas os módulos necessários para uma aplicação.

Definindo um Módulo

Um módulo é definido por um arquivo module-info.java na raiz do diretório de origem do módulo. Este arquivo contém a declaração do módulo, que começa com a palavra-chave module, seguida pelo nome do módulo e um bloco que pode conter as seguintes diretivas:

module com.meuapp {
    requires java.sql;
    exports com.meuapp.util;
    provides com.meuapp.servicos.InterfaceServico 
        with com.meuapp.servicos.ImplementacaoServico;
}

Aqui, requires é usado para especificar uma dependência de outro módulo, exports para declarar quais pacotes estão disponíveis para outros módulos e provides com with para definir um serviço oferecido pelo módulo.

Resolvendo Dependências

Com o sistema de módulos, as dependências são resolvidas em tempo de compilação, o que significa que todos os módulos necessários devem estar disponíveis para que a compilação seja bem-sucedida. Isso elimina o problema do "JAR hell" que era comum com o uso do classpath.

Encapsulamento Forte

Além de resolver dependências, o sistema de módulos permite um encapsulamento forte. Isso significa que um módulo pode esconder suas classes internas de outros módulos, expondo apenas o que é necessário. Essa característica aumenta a segurança e a integridade do código, pois previne o uso indevido de classes internas que não são destinadas ao uso público.

Compilando e Executando Módulos

Para compilar um módulo, você utiliza o compilador javac com o arquivo module-info.java. Uma vez compilado, o módulo pode ser executado com a ferramenta java, especificando o nome do módulo e a classe que contém o método main.

Conclusão

O sistema de módulos introduzido no Java 9 é um avanço significativo para a plataforma Java. Ele oferece uma maneira melhor de organizar e gerenciar o código e as dependências, proporciona um encapsulamento mais forte e facilita a criação de aplicações Java mais leves e mais seguras. Embora a transição para o sistema de módulos possa exigir uma curva de aprendizado e a refatoração do código existente, os benefícios a longo prazo são significativos para a comunidade Java.

Como o sistema de módulos é uma mudança profunda na forma como o Java é organizado e executado, é importante que os desenvolvedores se familiarizem com seus conceitos e ferramentas. A migração para o sistema de módulos pode ser um processo gradual, mas é um passo importante para garantir que as aplicações Java sejam sustentáveis e estejam prontas para os desafios futuros da computação.

Agora responda o exercício sobre o conteúdo:

Qual das seguintes afirmações sobre o sistema de módulos do Java, introduzido no Java 9, é verdadeira?

Você acertou! Parabéns, agora siga para a próxima página

Você errou! Tente novamente.

Imagem do artigo Explorando a biblioteca Java standard (java.util, java.io, java.math, etc.)

Próxima página do Ebook Gratuito:

155Explorando a biblioteca Java standard (java.util, java.io, java.math, etc.)

4 minutos

Ganhe seu Certificado deste Curso Gratuitamente! ao baixar o aplicativo Cursa e ler o ebook por lá. Disponível na Google Play ou App Store!

Disponível no Google Play Disponível no App Store

+ de 6,5 milhões
de alunos

Certificado Gratuito e
Válido em todo o Brasil

48 mil exercícios
gratuitos

4,8/5 classificação
nas lojas de apps

Cursos gratuitos em
vídeo, áudio e texto