JAR (formato de archivo)

format_list_bulleted Contenido keyboard_arrow_down
ImprimirCitar
Java archivo formato

Un archivo JAR ("archivo Java") es un formato de archivo de paquete que normalmente se usa para agregar muchos archivos de clase Java y metadatos y recursos asociados (texto, imágenes, etc.) en un archivo para su distribución.

Los archivos JAR son archivos de almacenamiento que incluyen un archivo de manifiesto específico de Java. Están construidos en formato ZIP y normalmente tienen una extensión de archivo .jar.

Diseño

Un archivo JAR permite que los tiempos de ejecución de Java implementen de manera eficiente una aplicación completa, incluidas sus clases y sus recursos asociados, en una sola solicitud. Los elementos del archivo JAR se pueden comprimir, lo que acorta los tiempos de descarga.

Un archivo JAR puede contener un archivo de manifiesto, que se encuentra en META-INF/MANIFEST.MF. Las entradas en el archivo de manifiesto describen cómo usar el archivo JAR. Por ejemplo, se puede usar una entrada Classpath para especificar otros archivos JAR para cargar con el JAR.

Extracción

El contenido de un archivo se puede extraer utilizando cualquier software de extracción de archivos que admita el formato ZIP, o la utilidad de línea de comandos jar proporcionada por el kit de desarrollo de Java.

Seguridad

Los desarrolladores pueden firmar archivos JAR digitalmente. En ese caso, la información de la firma pasa a formar parte del archivo de manifiesto incrustado. El JAR en sí no está firmado, sino que cada archivo dentro del archivo se enumera junto con su suma de verificación; son estas sumas de comprobación las que están firmadas. Múltiples entidades pueden firmar el archivo JAR, cambiando el propio archivo JAR con cada firma, aunque los propios archivos firmados siguen siendo válidos. Cuando el tiempo de ejecución de Java carga archivos JAR firmados, puede validar las firmas y negarse a cargar clases que no coincidan con la firma. También puede soportar 'sellado' paquetes, en los que Classloader solo permitirá que las clases de Java se carguen en el mismo paquete si todas están firmadas por las mismas entidades. Esto evita que se inserte código malicioso en un paquete existente y, por lo tanto, obtenga acceso a clases y datos del ámbito del paquete.

El contenido de los archivos JAR puede ofuscarse para dificultar la ingeniería inversa.

Archivos JAR ejecutables

Un programa Java ejecutable se puede empaquetar en un archivo JAR, junto con las bibliotecas que utiliza el programa. Los archivos JAR ejecutables tienen el manifiesto que especifica la clase de punto de entrada con Main-Class: myPrograms.MyClass y una Class-Path explícita (y se ignora el argumento -cp). Algunos sistemas operativos pueden ejecutarlos directamente al hacer clic en ellos. La invocación típica es java -jar foo.jar desde una línea de comandos.

Los lanzadores nativos se pueden crear en la mayoría de las plataformas. Por ejemplo, los usuarios de Microsoft Windows que prefieren tener archivos EXE de Windows pueden usar herramientas como JSmooth, Launch4J, WinRun4J o Nullsoft Scriptable Install System para envolver archivos JAR individuales en ejecutables.

Manifiesto

Un archivo de manifiesto es un archivo de metadatos contenido en un JAR. Define la extensión y los datos relacionados con el paquete. Contiene pares de nombre-valor organizados en secciones. Si se pretende utilizar un archivo JAR como archivo ejecutable, el archivo de manifiesto especifica la clase principal de la aplicación. El archivo de manifiesto se llama MANIFEST.MF. El directorio de manifiesto tiene que ser la primera entrada del archivo comprimido.

Especificaciones

El manifiesto aparece en la ubicación canónica META-INF/MANIFEST.MF. Solo puede haber un archivo de manifiesto en un archivo y debe estar en esa ubicación.

El contenido del archivo de manifiesto en un archivo JAR creado con la versión 1.0 del Kit de desarrollo de Java es el siguiente.

Manifiesto-Versión: 1.0

El nombre está separado de su valor por dos puntos. El manifiesto predeterminado muestra que se ajusta a la versión 1.0 de la especificación del manifiesto.

El manifiesto puede contener información sobre los otros archivos que están empaquetados en el archivo. El contenido del manifiesto depende del uso previsto para el archivo JAR. El archivo de manifiesto predeterminado no hace suposiciones sobre qué información debe registrar sobre otros archivos, por lo que su única línea contiene datos solo sobre sí mismo. Debe estar codificado en UTF-8.

Encabezados de manifiesto de propósito especial

Los archivos JAR creados únicamente con el fin de archivar no utilizan el archivo MANIFEST.MF.

La mayoría de los usos de los archivos JAR van más allá del simple archivado y compresión y requieren información especial en el archivo de manifiesto.

Características

El manifiesto permite a los desarrolladores definir varias funciones útiles para sus archivos jar. Las propiedades se especifican en pares clave-valor.

Aplicaciones

Si una aplicación está contenida en un archivo JAR, la máquina virtual de Java necesita conocer el punto de entrada de la aplicación. Un punto de entrada es cualquier clase con un método public static void main(String[] args). Esta información se proporciona en el encabezado de clase principal del manifiesto, que tiene la forma general:

Clase principal: com.example.MyClassName

En este ejemplo, com.example.MyClassName.main() se ejecuta al iniciar la aplicación.

Sellado de paquetes

Opcionalmente, se puede sellar un paquete dentro de un archivo JAR, lo que significa que todas las clases definidas en ese paquete se archivan en el mismo archivo JAR. Se puede sellar un paquete para garantizar la consistencia de la versión entre las clases del software o como medida de seguridad.

Para sellar un paquete, debe aparecer una entrada de Nombre, seguida de un encabezado Sellado, como:

Nombre: myEmpany/myPackage/Sealed: verdadero

El valor del encabezado Nombre es el nombre de ruta relativo del paquete. Tenga en cuenta que termina con '/' para distinguirlo de un nombre de archivo. Cualquier encabezado que siga a un encabezado de nombre, sin líneas en blanco intermedias, se aplica al archivo o paquete especificado en el encabezado de nombre. En el ejemplo anterior, debido a que el encabezado Sealed aparece después del encabezado Name: myCompany/myPackage sin líneas en blanco intermedias, se aplica el encabezado Sealed (solamente) al paquete myCompany/myPackage.

La función de paquetes sellados está obsoleta con el sistema de módulos de la plataforma Java introducido en Java 9, en el que los módulos no pueden dividir paquetes.

Versión de paquetes

Varios encabezados de manifiesto contienen información de versiones. Se puede asignar un conjunto de encabezados a cada paquete. Los encabezados de control de versiones aparecen directamente debajo del encabezado Nombre del paquete. Este ejemplo muestra todos los encabezados de control de versiones:

Nombre: java/util/Especificación-Título: "Java Utility Classes"Especificación-Versión: "1.2"Especificación-Vendor: "Sun Microsystems, Inc.".Aplicación-Título: "java.util"Implementation-Version: "build57"Implementation-Vendor: "Sun Microsystems, Inc".

Lanzamiento múltiple

Un frasco se puede marcar opcionalmente como un frasco de liberación múltiple. El uso de la función de lanzamiento múltiple permite a los desarrolladores de bibliotecas cargar código diferente según la versión del tiempo de ejecución de Java. Esto, a su vez, permite a los desarrolladores aprovechar las nuevas funciones sin sacrificar la compatibilidad.

Se habilita un jar de varias versiones mediante la siguiente declaración en el manifiesto:

Multi-Release: verdadero

Dependencias

El archivo MANIFEST.MF puede usarse para especificar todas las clases que deben cargarse para que una aplicación pueda ejecutarse.

Tenga en cuenta que las entradas de Class-Path están delimitadas con espacios, no con el delimitador de ruta del sistema:

Clase-Path: . pkg1.jar ruta/a/pkg2.jar

Compatibilidad con Apache Ant Zip/JAR

La herramienta de compilación Apache Ant tiene su propio paquete para leer y escribir archivos Zip y JAR, incluida la compatibilidad con las extensiones del sistema de archivos Unix. El paquete org.apache.tools.zip se publica bajo la licencia de Apache Software Foundation y está diseñado para usarse fuera de Ant.

Formatos relacionados

Varios formatos de archivo relacionados se basan en el formato JAR:

  • Archivos WAR (archivo de aplicaciones web), también archivos Java, almacenar archivos XML, clases Java, JavaServer Pages y otros objetos para aplicaciones web.
  • Archivos RAR (archivo de adaptador de recursos) (para no confundirse con el formato de archivo RAR), también archivos Java, almacenar archivos XML, clases Java y otros objetos para aplicaciones J2EE Connector Architecture (JCA).
  • Los archivos EAR (archivo de la empresa) proporcionan archivos Java compuestos que combinan archivos XML, clases Java y otros objetos, incluyendo archivos de archivo JAR, WAR y RAR Java para aplicaciones Enterprise.
  • SAR (archivo de servicio) es similar a EAR. Proporciona un service.xml archivo y archivos JAR acompañantes.
  • APK (Paquete de aplicación Android), una variante del formato de archivo Java, se utiliza para aplicaciones Android.
  • AAR (archivo Android) se utiliza para la distribución de bibliotecas Android, típicamente a través de Maven.
  • PAR (archivo plano) - apoyado por Eclipse Virgo OSGi servidor de aplicaciones, permite el despliegue de aplicaciones multi-bundle OSGi como un solo archivo y proporciona aislamiento de otras aplicaciones basadas en PAR implementadas en el mismo servidor.
  • KAR (archivo karaf) - apoyado por Apache Karaf OSGi servidor de aplicaciones, permite el despliegue de aplicaciones OSGi de múltiples dimensiones.
Más resultados...
Tamaño del texto:
undoredo
format_boldformat_italicformat_underlinedstrikethrough_ssuperscriptsubscriptlink
save