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.javaO 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.javapara 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 oJOptionPaneda biblioteca Swing.