O que é o JLink?
jlink é uma ferramenta padrão do JDK que constrói uma imagem de runtime customizada, contendo apenas os módulos que sua aplicação realmente precisa.
Question
O que é o JLink?
What It Is
O JDK oferece duas ferramentas que trabalham juntas para empacotamento e distribuição:
jlinkcria uma imagem de runtime enxuta.jpackageembrulha essa imagem em um instalador ou pacote nativo.
jlink funciona com aplicações modulares. Ele parte do módulo da sua aplicação, resolve os módulos que ela precisa, e então monta uma imagem de runtime que inclui apenas esse grafo de módulos. Isso significa que você leva os módulos do JDK que realmente usa, em vez de embarcar o JDK inteiro.
Na prática, essa imagem já contém um launcher java executável e os módulos de plataforma dos quais sua aplicação depende, então a máquina de destino não precisa de uma instalação separada do JDK completo.
Um detalhe importante: os módulos são incluídos no nível do módulo, não classe por classe. Então, se você depende de um módulo grande só pra usar uma classe, pode acabar levando mais do que esperava. jlink é ótimo pra enxugar o JDK, mas não consegue enxugar dentro de um módulo.
Se a sua aplicação não é modular, jlink não é a ferramenta certa. Ele precisa de módulos nomeados para conseguir resolver o grafo de dependências antes de construir a imagem.
Practical Example
plaintextjlink \ --module-path $JAVA_HOME/jmods:mods \ --add-modules com.myapp \ --output myapp-runtime
Esse comando diz ao jlink onde encontrar os módulos de plataforma ($JAVA_HOME/jmods) e os módulos da sua aplicação (mods), qual módulo raiz incluir, e onde escrever a imagem de runtime customizada.
A partir daí, o jlink percorre o grafo de módulos:
- começa em
com.myapp; - adiciona toda dependência
requirestransitiva; - mantém apenas os módulos do JDK que são realmente necessários;
- escreve a imagem final em
myapp-runtime.
Se você usar o jpackage depois, pode transformar essa imagem num instalador específico da plataforma, em vez de distribuir um diretório cru.
Solution and Conclusion
Use jlink quando quiser distribuir uma aplicação modular com um runtime menor e autocontido. Depois use jpackage se quiser transformar esse runtime num instalador para Windows, macOS ou Linux.
Pense no pipeline assim:
- compile o seu módulo;
- empacote como um JAR modular;
- gere um runtime customizado com
jlink; - opcionalmente, embrulhe esse runtime com
jpackage.
Então, resumindo: jlink enxuga o runtime, jpackage entrega.