Cheiro de Java 9: Módulos

Cheiro de Java 9: Módulos

Antes de mais nada, este texto é direcionado para a área técnica de desenvolvimento de software em Java. Hoje as nossas palavras têm aroma de módulos.

Jigsaw significa quebra-cabeças e foi o nome que o projeto pai dos módulos recebeu. O nome parece jogos do tipo… mortais. Parecia mesmo! Este projeto teve início em 2008, prometido para o Java 7, em seguida para a versão 8, mas não perdeu a vida! Amplamente revisado, testado e corrigido, o projeto logrou êxito e compõe a versão oficial lançada em setembro do Java 9.

Os objetivos iniciais eram melhorar a performance, a segurança e manutenibilidade das aplicações, além de tornar mais fácil desenvolvimento de bibliotecas e sistemas robustos em Java. Incluindo a JDK, para permitir o uso deste kit de desenvolvimento completo em dispositivos menores, com poucos recursos de memória e processamento. A resposta para estes objetivos foram os módulos.

Legal! E daí? Um módulo conterá um arquivo module-info.java em um diretório com o mesmo nome do pacote principal do projeto, por convenção. Dentro deste arquivo, poderão ser utilizados comandos para informar que este módulo utilizará um outro determinado módulo, para informar que exportará um determinado pacote para ser utilizado por outros módulos e outros comandos relacionados a usos e acessos. Tomando como base uma aplicação de nome “exemplo” nesta nova estrutura, o arquivo module-info.java e a organização dos pacotes seria esta:

module net.mirante.exemplo {
    requires java.sql;
    exports net.mirante.exemplo;
}

exemplo
└─src
  └─net.mirante.exemplo
    └─module-info.java
    └─net
      └─mirante
        └─exemplo
          └─ExemploService.java

Arquivo module-info.java e estrutura de pastas do projeto modular “exemplo”.

O arquivo module-info.java informa que utilizará o pacote java.sql. Com isso, somente classes deste módulo e do módulo java.base, que é implicitamente utilizado sempre e contém as principais bibliotecas Java (java.lang, java.io e etc), poderão ser utilizadas. O arquivo também menciona que o módulo net.mirante.exemplo exporta, ou seja, permite o acesso, ao pacote net.mirante.exemplo.

Refactoring? Talvez não, existe o conceito de módulo automático e o classpath continuará existindo. O uso dos módulos é opcional. Mas a máquina virtual e o kit de desenvolvimento foram reescritos para os módulos, aumentado a segurança de acesso e performance.

Existe muito mais do assunto módulos para ser explorado. Este é apenas um cheiro dos diversos recursos do Java 9.

Referências

PROJECT JIGSAW. OpenJDK. Disponível em: http://openjdk.java.net/projects/jigsaw. Acesso em: 05/12/2017.

YOLAND. POIRIER. MODULAR DEVELOPMENT WITH JDK 9. Oracle. Disponível em: https://blogs.oracle.com/java/modular-development. Acesso em: 05/12/2017.

YOLAND. POIRIER. JAVA 9 RELEASE NOW AVAILABLE! Oracle. Disponível em: https://blogs.oracle.com/java/java-9-release-now-available. Acesso em: 05/12/2017.

JSR 376: JAVATM PLATFORM MODULE SYSTEM. JCP: Java Community Process. Disponível em: https://jcp.org/en/jsr/detail?id=376. Acesso em 05/12/2017