Declaração de Dependências entre Módulos Java
Módulos podem depender de outros para utilizar suas funcionalidades. Para exemplificar, vamos partir de um projeto com um módulo simples, cuja estrutura é a seguinte:
C:\java └─── demo ├─── com │ └─── programicio │ └─── hello │ └─── Hello.java └─── module-info.java
O código no arquivo Hello.java
exibirá uma mensagem em uma janela gráfica, utilizando a biblioteca Swing.
package com.programicio.hello;
import javax.swing.JOptionPane;
public class Hello {
public static void main(String[] args) {
JOptionPane.showMessageDialog(null, "Hello Demo Module!");
}
}
Para exibir a mensagem, o código utiliza o método estático showMessageDialog
da classe JOptionPane
. Para que esta classe seja reconhecida, ela é importada no início do arquivo. Contudo, como estamos trabalhando com um sistema modular, apenas importar a classe ou o pacote não é suficiente. É preciso indicar ao nosso módulo que ele deve utilizar o módulo onde a classe JOptionPane
está definida.
Como saber em qual módulo uma determinada classe está localizada? Para as classes que fazem parte do JDK, a melhor fonte é a documentação oficial do Java. No início da descrição da classe, geralmente é indicado a qual módulo ela pertence.
A documentação informa que a classe JOptionPane
pertence ao módulo java.desktop
. Com essa informação, podemos indicar ao nosso módulo que precisamos utilizar o java.desktop
. Para isso, o arquivo module-info.java
é modificado da seguinte forma:
module demo {
requires java.desktop;
}
Após a diretiva requires
, é especificado o nome do módulo do qual o nosso módulo depende. Se o módulo utilizasse várias outras dependências, cada uma delas seria indicada com sua própria diretiva requires
.
Em seguida, o módulo pode ser compilado e executado. Após a execução, será exibida uma janela gráfica com a mensagem.
Resumo
- Dependências de Módulos: Módulos podem precisar de outros para funcionar.
- A Diretiva
requires
: É usada nomodule-info.java
para declarar uma dependência. - Documentação: A documentação oficial do Java é a melhor forma de descobrir a qual módulo uma classe do JDK pertence.
- Exemplo
java.desktop
: Este módulo contém as classes para interfaces gráficas, como oJOptionPane
da biblioteca Swing.