JAR (formato de arquivo) - JAR (file format)

Arquivo Java
Ícone do arquivo KDE JAR
Extensão de nome de arquivo
.jar
Tipo de mídia da Internet
aplicativo / java-archive
Identificador de tipo uniforme (UTI) com.sun.java-archive
número mágico 50 4b 03 04 ASCII: PK \ x03 \ x04
Desenvolvido por Netscape , Sun Microsystems , Oracle Corporation
Tipo de formato Arquivo de arquivo , compressão de dados
Estendido de fecho eclair

Um JAR ( J ava AR chive) é um formato de arquivo de pacote normalmente usado para agregar muitos arquivos de classe Java e metadados e recursos associados (texto, imagens, etc.) em um arquivo para distribuição.

Os arquivos JAR são arquivos compactados que incluem um arquivo de manifesto específico do Java . Eles são construídos no formato ZIP e normalmente têm uma .jar extensão de arquivo .

Projeto

Um arquivo JAR permite que os tempos de execução Java implementem com eficiência um aplicativo inteiro, incluindo suas classes e seus recursos associados, em uma única solicitação. Os elementos do arquivo JAR podem ser compactados, reduzindo o tempo de download.

Um arquivo JAR pode conter um arquivo de manifesto, que está localizado em META-INF/MANIFEST.MF. As entradas no arquivo de manifesto descrevem como usar o arquivo JAR. Por exemplo, uma entrada Classpath pode ser usada para especificar outros arquivos JAR para carregar com o JAR.

Extração

O conteúdo de um arquivo pode ser extraído usando qualquer software de compactação padrão ou o jarutilitário de linha de comando: " -xf foo.".

Segurança

Os desenvolvedores podem assinar digitalmente arquivos JAR. Nesse caso, as informações de assinatura tornam-se parte do arquivo de manifesto incorporado. O JAR em si não é assinado, mas em vez disso, todos os arquivos dentro do archive são listados junto com sua soma de verificação; são essas somas de verificação que são assinadas. Várias entidades podem assinar o arquivo JAR, alterando o próprio arquivo JAR a cada assinatura, embora os próprios arquivos assinados permaneçam válidos. Quando o Java runtime carrega arquivos JAR assinados, ele pode validar as assinaturas e se recusar a carregar classes que não correspondam à assinatura. Ele também pode suportar pacotes 'lacrados', nos quais o Classloader só permitirá que as classes Java sejam carregadas no mesmo pacote se todas forem assinadas pelas mesmas entidades. Isso evita que código malicioso seja inserido em um pacote existente e, assim, ganhe acesso a classes e dados com escopo de pacote.

O conteúdo dos arquivos JAR pode ser ofuscado para dificultar a engenharia reversa .

Arquivos JAR executáveis

Um programa Java executável pode ser empacotado em um arquivo JAR, junto com quaisquer bibliotecas que o programa usa. Os arquivos JAR executáveis ​​têm o manifesto especificando a classe do ponto de entrada com Main-Class: myPrograms.MyClassum Class-Path explícito (e o argumento -cp é ignorado). Alguns sistemas operacionais podem executá-los diretamente quando clicados. A chamada típica é a java -jar foo.jarpartir de uma linha de comando.

Os lançadores nativos podem ser criados na maioria das plataformas. Por exemplo, os usuários do Microsoft Windows que preferem arquivos EXE do Windows podem usar ferramentas como JSmooth , Launch4J, WinRun4J ou Nullsoft Scriptable Install System para agrupar arquivos JAR únicos em executáveis.

Manifesto

Um arquivo de manifesto é um arquivo de metadados contido em um JAR. Ele define a extensão e os dados relacionados ao pacote. Ele contém pares nome-valor organizados em seções. Se um arquivo JAR se destina a ser usado como um arquivo executável, o arquivo de manifesto especifica a classe principal do aplicativo. O arquivo de manifesto é nomeado MANIFEST.MF. O diretório de manifesto deve ser a primeira entrada do arquivo compactado.

Especificações

O manifesto aparece no local canônicoMETA-INF/MANIFEST.MF . Pode haver apenas um arquivo de manifesto em um arquivo e deve estar nesse local.

O conteúdo do arquivo de manifesto em um arquivo JAR criado com a versão 1.0 do Java Development Kit é o seguinte.

Manifest-Version: 1.0

O nome é separado de seu valor por dois pontos. O manifesto padrão mostra que está em conformidade com a versão 1.0 da especificação do manifesto.

O manifesto pode conter informações sobre os outros arquivos empacotados no arquivo. O conteúdo do manifesto depende do uso pretendido para o arquivo JAR. O arquivo de manifesto padrão não faz suposições sobre quais informações ele deve registrar sobre outros arquivos, portanto, sua única linha contém dados apenas sobre si mesmo. Deve ser codificado em UTF-8.

Cabeçalhos de Manifesto de Finalidade Especial

Os arquivos JAR criados apenas para fins de arquivamento não usam o MANIFEST.MFarquivo.

A maioria dos usos dos arquivos JAR vai além do simples arquivamento e compactação e requer informações especiais no arquivo de manifesto.

Características

O manifesto permite que os desenvolvedores definam vários recursos úteis para seus jars. As propriedades são especificadas em pares de valores-chave.

Formulários

Se um aplicativo estiver contido em um arquivo JAR, a Java Virtual Machine precisa saber o ponto de entrada do aplicativo. Um ponto de entrada é qualquer classe com um public static void main(String[] args)método. Essas informações são fornecidas no cabeçalho Main-Class do manifesto, que tem a forma geral:

Main-Class: com.example.MyClassName

Neste exemplo, é com.example.MyClassName.main()executado na inicialização do aplicativo.

Selagem da embalagem

Opcionalmente, um pacote dentro de um arquivo JAR pode ser lacrado, o que significa que todas as classes definidas nesse pacote são arquivadas no mesmo arquivo JAR. Um pacote pode ser lacrado para garantir a consistência da versão entre as classes do software ou como medida de segurança.

Para lacrar um pacote, uma entrada de Nome precisa aparecer, seguida por um cabeçalho Selado, como:

Name: myCompany/myPackage/
Sealed: true

O valor do cabeçalho do Nome é o nome do caminho relativo do pacote. Observe que termina com '/' para distingui-lo de um nome de arquivo. Quaisquer cabeçalhos após um cabeçalho de Nome, sem nenhuma linha em branco intermediária, se aplicam ao arquivo ou pacote especificado no cabeçalho de Nome. No exemplo acima, como o Sealedcabeçalho ocorre após o Name: myCompany/myPackagecabeçalho sem linhas em branco intermediárias, o Sealedcabeçalho se aplica (apenas) ao pacote myCompany/myPackage.

O recurso de pacotes lacrados é ultrapassado pelo Java Platform Module System introduzido no Java 9, no qual os módulos não podem dividir pacotes.

Controle de versão de pacote

Vários cabeçalhos de manifesto contêm informações de versão. Um conjunto de cabeçalhos pode ser atribuído a cada pacote. Os cabeçalhos de controle de versão aparecem diretamente abaixo do cabeçalho Nome do pacote. Este exemplo mostra todos os cabeçalhos de controle de versão:

Name: java/util/
Specification-Title: "Java Utility Classes"
Specification-Version: "1.2"
Specification-Vendor: "Sun Microsystems, Inc.".
Implementation-Title: "java.util"
Implementation-Version: "build57"
Implementation-Vendor: "Sun Microsystems, Inc."

Multi-lançamento

Um jar pode ser opcionalmente marcado como um jar multi-release. O uso do recurso de vários lançamentos permite que os desenvolvedores de bibliotecas carreguem códigos diferentes, dependendo da versão do Java Runtime. Isso, por sua vez, permite que os desenvolvedores aproveitem novos recursos sem sacrificar a compatibilidade.

Um jar multi-lançamento é habilitado usando a seguinte declaração no manifesto:

Multi-Release: true

Dependências

O MANIFEST.MFarquivo pode ser usado para especificar todas as classes que devem ser carregadas para que um aplicativo possa ser executado.

Observe que as entradas Class-Path são delimitadas com espaços, não com o delimitador de caminho do sistema:

Class-Path: . pkg1.jar path/to/pkg2.jar

Suporte Apache Ant Zip / JAR

A ferramenta de construção Apache Ant tem seu próprio pacote para ler e gravar arquivos Zip e JAR, incluindo suporte para extensões de sistema de arquivos Unix . O pacote org.apache.tools.zip é lançado sob a licença Apache Software Foundation e é projetado para ser usado fora do Ant.

Formatos Relacionados

Vários formatos de arquivo relacionados são construídos no formato JAR:

  • Arquivos WAR (Web application archive), também arquivos Java, armazenam arquivos XML , classes Java, JavaServer Pages e outros objetos para aplicativos da web.
  • Arquivos RAR (resource adapter archive) (não deve ser confundido com o formato de arquivo RAR ), também arquivos Java, arquivos XML de armazenamento, classes Java e outros objetos para aplicativos J2EE Connector Architecture (JCA).
  • Os arquivos EAR (archive corporativo) fornecem arquivos Java compostos que combinam arquivos XML, classes Java e outros objetos, incluindo arquivos JAR, WAR e RAR Java para aplicativos corporativos.
  • SAR (arquivo de serviço) é semelhante ao EAR. Ele fornece um arquivo service.xml e arquivos JAR que o acompanham.
  • APK (pacote de aplicativo Android), uma variante do formato de arquivo Java, é usado para aplicativos Android .
  • AAR (arquivo Android) é usado para distribuição de bibliotecas Android , normalmente via Maven .
  • PAR (arquivo plano) - suportado pelo servidor de aplicativos Eclipse Virgo OSGi , permite a implantação de aplicativos OSGi de vários pacotes como um único arquivo e fornece isolamento de outros aplicativos baseados em PAR implantados no mesmo servidor.
  • KAR (arquivo Karaf) - suportado pelo servidor de aplicativos Apache Karaf OSGi, permite a implantação de aplicativos OSGi de vários pacotes e recursos.

Veja também

Referências

links externos