O que é o formato de ficheiro JAR?
Arquivos com a extensão .jar são arquivos ZIP usados pela plataforma Java para agrupar arquivos .class compilados, metadados e recursos - como imagens, arquivos de texto e dados de configuração - em um único pacote portátil. O formato foi introduzido com o JDK 1.1 e continua sendo a principal unidade de distribuição para bibliotecas e aplicativos Java.
Um arquivo .jar pode funcionar como um executável autônomo quando seu arquivo META-INF/MANIFEST.MF especifica uma entrada Main-Class. Quando iniciado com java -jar file.jar, a JVM lê este atributo e inicia a classe designada, permitindo que os desenvolvedores enviem um aplicativo completo como um único arquivo que roda em qualquer sistema com um ambiente de execução compatível instalado. Cada entrada individual dentro do arquivo também pode ser compactada independentemente usando o algoritmo DEFLATE, o que reduz o tamanho do pacote enquanto ainda permite acesso aleatório rápido a arquivos individuais.
Entre os metadados que um .jar carrega, o arquivo META-INF/MANIFEST.MF é o mais importante: ele define como o pacote é usado, lista dependências de classpath via Class-Path e pode conter atributos de segurança. As assinaturas digitais são armazenadas como arquivos .SF e .DSA/.RSA separados dentro de META-INF/, não no próprio manifesto. O Java 9 introduziu dois recursos adicionais: JARs de múltiplas versões (Multi-Release) colocam substituições de classe específicas da versão sob META-INF/versions/N/, e JARs modulares incluem um module-info.class na raiz do arquivo.
Para navegar ou extrair o conteúdo de um arquivo .jar, você pode usar qualquer ferramenta de descompactação ZIP padrão e realizar as mesmas ações que faria com um arquivo normal - renomeá-lo para .zip funciona igualmente bem. Você também pode usar o comando jar incluído no JDK:
- Listar conteúdo:
jar -tf file.jar - Extrair:
jar -xf file.jar - Executar (se executável):
java -jar file.jar
Formatos de arquivo relacionados ao lado do servidor incluem arquivos .war para aplicações web e arquivos .ear para aplicações empresariais, ambos construídos sobre a mesma estrutura baseada em ZIP.
Segurança e proteção
RISCO: MEDIUMUm JAR executável é um programa real: com o Java instalado, «java -jar» executa qualquer código que ele contenha, com as permissões do seu usuário - portanto, um JAR desconhecido pode carregar malware (Java RATs e trojans são uma família conhecida). Trate um JAR baixado como qualquer .exe: execute apenas aqueles de uma fonte em que você confia e tenha cuidado com anexos .jar não solicitados. Apenas inspecioná-lo como um ZIP (7-Zip) é seguro; executá-lo é o risco. Um JAR pode ser assinado digitalmente, mas uma assinatura apenas prova a origem, não a segurança.
Detalhes do formato
em resumoProgramas que abrem arquivos JAR
Detalhes técnicos
especificação profunda| Formato de contêiner | Arquivo ZIP - compartilha os magic bytes `PK` (`50 4B 03 04`) no deslocamento 0 com todos os arquivos ZIP padrão |
| Tipo MIME | `application/java-archive` |
| Arquivo interno obrigatório | `META-INF/MANIFEST.MF` - deve estar presente; controla metadados, classpath e comportamento executável |
| Gatilho de JAR executável | Atributo `Main-Class` no `MANIFEST.MF`; iniciado com `java -jar file.jar` |
| Formato de bytecode do payload | Arquivos `.class` compilados contendo bytecode JVM - independente de plataforma, não é código de máquina nativo |
| Compactação por entrada | Algoritmo DEFLATE (o mesmo do ZIP); entradas individuais também podem ser armazenadas sem compactação para acesso aleatório mais rápido |
| Assinaturas digitais | Arquivo de assinatura `.SF` emparelhado com um arquivo de chave `.DSA` ou `.RSA`, ambos armazenados dentro de `META-INF/` |
| Declaração de Classpath | O atributo de manifesto `Class-Path` lista JARs dependentes separados por espaços para resolução em tempo de execução |
| JAR de Múltiplas Versões (MR-JAR) | Java 9+; substituições de classe específicas da versão colocadas sob `META-INF/versions/N/` para que JVMs mais novas escolham o bytecode correto |
| Descritor de módulo (JPMS) | Um JAR modular inclui `module-info.class` na raiz do arquivo, habilitando o sistema de módulos do Java 9+ |
| Selagem de pacote | `Sealed: true` no manifesto impede que outros JARs injetem classes no mesmo pacote em tempo de execução |
| Uber/Fat JAR | Variante de implantação autocontida que incorpora todos os JARs de dependência; requer um carregador de classes personalizado, como o Spring Boot Loader |
| Lançado | 1996-1997 (JDK 1.1) |
| Padrão aberto | Sim · livre de royalties |
| Especificação | docs.oracle.com |
Conversões de JAR
Perguntas e Respostas da Comunidade
perguntado por usuáriosAinda não há perguntas - seja o primeiro a perguntar sobre arquivos JAR.