Domínio 7 — Empacotamento, deployment e módulos
TL;DR
Este é um domínio de cobertura parcial na trilha: o sistema de módulos (JPMS) e as ferramentas
jlink/jpackagejá têm notas dedicadas nos galhos de JVM e JavaFX, mas três tópicos da prova —jar/MANIFEST, JShell e implicit classes/instance main — ainda não têm casa própria (veja a seção Lacuna da trilha, abaixo). Atenção redobrada com JPMS: é pouco usado em produção real (Spring e Jakarta EE não dependem dele agressivamente), mas cai muito na prova. Estude mesmo que você nunca vá escrever ummodule-info.javano trabalho.
Títulos oficiais
- 1Z0-830 (Java 21): Packaging and Deploying Java Code
- 1Z0-831 (Java 25): Packaging and Deploying Java Code
Os títulos são idênticos entre as duas versões da prova. O que muda é o estado de maturidade de recursos como implicit classes / instance main methods, que evoluíram de preview (Java 21) até estabilizar nas versões mais novas.
O que a Oracle cobra
O domínio mistura o sistema de módulos com as ferramentas de empacotamento e execução da plataforma. Em linhas gerais:
- JPMS —
module-info.java— diretivasrequires,exports,opens,uses,provides. - Tipos de módulo — named module (com
module-info), unnamed module (classpath, semmodule-info), automatic module (jar no modulepath semmodule-info). - ServiceLoader —
ServiceLoader.load(), casado comuses/providespara descoberta de implementações em runtime. - jlink — geração de runtime customizado (imagem só com os módulos necessários).
- Migração — passar uma aplicação de classpath para modulepath.
jare META-INF/MANIFEST.MF — empacotar classes em um jar, marcarMain-Class:, gerar jar executável.jpackage— instalador nativo da plataforma (Java 14+):.deb,.msi,.dmg, etc.javac/java— compilação e execução, com a distinção entre classpath (-cp) e modulepath (-p/--module-path).- JShell (Java 9+) — REPL oficial da plataforma.
- Implicit classes e instance main methods — preview no Java 21, evoluindo até virar recurso final nas versões seguintes: permitem escrever scripts Java sem o boilerplate de
public static void main(String[])e sem declaração explícita de classe.
Mapa de revisão
A trilha cobre o coração deste domínio em três notas. Revise estas antes da prova:
- JPMS — o sistema de módulos (G3) — todo o sistema de módulos: diretivas, tipos de módulo, ServiceLoader, migração.
- Empacotamento — jlink e jpackage (G6) — jlink e jpackage na prática, com um app modular real.
- A evolução do Java (G1) — contexto histórico de implicit classes e instance main methods (de preview a final).
Pegadinhas deste domínio
Snippets curtos que a Oracle adora transformar em pegadinha:
-
exportsvsopens—exports pacote;libera acesso ao pacote em tempo de compilação (a API pública do módulo).opens pacote;libera reflexão em runtime (frameworks como Spring/Hibernate que vasculham campos privados). São coisas distintas: um módulo podeopenssemexportse vice-versa.module com.app { exports com.app.api; // API pública, compile-time opens com.app.model; // reflexão em runtime (JPA, Jackson...) } -
Automatic module deriva o nome do jar — um jar sem
module-infocolocado no modulepath vira automatic module, e seu nome é derivado do nome do arquivo jar (ex.:commons-lang3-3.12.jar→commons.lang3). Isso é frágil: renomear o jar muda o nome do módulo e quebra osrequiresde quem depende dele. -
requires transitiverepassa a dependência — se o módulo A fazrequires transitive B, então qualquer módulo que façarequires Atambém enxerga B automaticamente, sem precisar declararrequires B. Sem otransitive, B fica visível só dentro de A. -
Sem
module-info, tudo cai no unnamed module — código no classpath (não no modulepath) vive no unnamed module, que lê todos os outros módulos e exporta tudo. É o modo de compatibilidade pré-Java 9.
Mais armadilhas no catálogo de pegadinhas.
Lacuna da trilha
Seam de honestidade — cobertura parcial
A trilha cobre JPMS (galho 3) e jlink/jpackage (galho 6) com profundidade, mas não tem nota dedicada a três tópicos que a prova cobra:
jar/MANIFEST, JShell e implicit classes/instance main. Segue o conteúdo autocontido mínimo de cada um para você não chegar cru na prova. Estude estes à parte (livro Sybex da OCP / docs oficiais), pois aqui é só o esqueleto.
1. jar e MANIFEST.MF
A ferramenta jar empacota classes compiladas (e recursos) em um único arquivo .jar (que é, na prática, um zip com metadados em META-INF/).
# criar um jar executável apontando a classe main
jar --create --file app.jar --main-class com.app.Main -C build/classes .
# inspecionar o conteúdo
jar --list --file app.jar
# extrair
jar --extract --file app.jarO arquivo META-INF/MANIFEST.MF carrega metadados do jar. A entrada-chave para a prova é:
Main-Class: com.app.Main
Quando o Main-Class: está presente, o jar é executável e roda com java -jar app.jar (sem precisar nomear a classe na linha de comando). A flag --main-class do jar grava essa entrada no manifesto automaticamente. Sem ela, java -jar falha com “no main manifest attribute”.
2. JShell
REPL oficial da plataforma, disponível desde o Java 9. Você digita expressões e declarações e elas são avaliadas na hora — ótimo para testar hipóteses de output (justamente o tipo de coisa que a prova pergunta: “qual o resultado deste trecho?”).
$ jshell
jshell> int x = 2 + 3
x ==> 5
jshell> System.out.println("oi".repeat(3))
oioioiComandos básicos (começam com /):
/vars— lista as variáveis declaradas na sessão./methods— lista os métodos declarados./imports— mostra os imports ativos (vários já vêm carregados por padrão)./exit— encerra a sessão.
3. Implicit classes e instance main methods
Desde o Java 21 (como preview) e evoluindo até estabilizar nas versões seguintes, a plataforma permite escrever programas sem o boilerplate clássico. Dois ingredientes:
- Instance main method — o
mainpode ser de instância (semstatic), e até sem o parâmetroString[] args. - Implicit class — um arquivo
.javasem declaração de classe explícita: o compilador embrulha tudo numa classe implícita.
O “Hello World” mínimo passa a ser:
void main() {
System.out.println("Olá!");
}Não há public class, não há static, não há String[] args. Isso baixa drasticamente a barreira para scripts Java de aprendizado e protótipos. Na prova, o objetivo é reconhecer a sintaxe e saber que ela é válida nas versões em que está habilitada — não decorar a versão exata em que virou final.
Não pare por aqui
Esses três tópicos merecem estudo à parte no livro Sybex da OCP (capítulo de módulos e ferramentas) e na documentação oficial das ferramentas (
jar,jshell,jpackage). Esta seção é só uma rede de segurança, não a cobertura completa.
Em entrevista
Uma frase que demonstra entendimento conceitual de módulos, sem reivindicar credencial:
“In JPMS,
exportsexposes a package as part of the module’s public API at compile time, whileopensallows deep reflective access at runtime — that’s what frameworks like Spring need to inspect private fields.”
Vocabulário PT | EN:
| Português | English |
|---|---|
| módulo | module |
| exporta | exports |
| abre (reflexão) | opens |
Veja também
Referências
- JPMS / ferramentas — docs oficiais (manual do
javac): https://docs.oracle.com/en/java/javase/21/docs/specs/man/javac.html - Enthuware — syllabus da OCP Java 21: https://enthuware.com/oca-ocp-java-certification-resources/290-ocp-java-21-exam-syllabus