Un archivo JAR ("archivo Java") es un formato de archivo de paquete que se utiliza normalmente para agrupar muchos archivos de clase Java y metadatos y recursos asociados (texto, imágenes, etc.) en un solo archivo para su distribución. [ 4 ]
Los archivos JAR son archivos comprimidos que incluyen un archivo de manifiesto específico de Java . Están basados en el formato ZIP y normalmente tienen una .jarextensión de archivo . [ 5 ]
Diseño
Un archivo JAR permite que los entornos de ejecución de Java implementen de forma eficiente una aplicación completa, incluyendo sus clases y sus recursos asociados, en una sola solicitud. Los elementos de un archivo JAR pueden comprimirse, lo que reduce los tiempos de descarga.
Un archivo JAR puede contener un archivo de manifiesto, ubicado en META-INF/MANIFEST.MF. Las entradas en el archivo de manifiesto describen cómo usar el archivo JAR. Por ejemplo, una entrada de Classpath se puede usar para especificar otros archivos JAR que se cargarán junto 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 jarutilidad de línea de comandos proporcionada por el Kit de Desarrollo de Java.
Seguridad
Los desarrolladores pueden firmar digitalmente los archivos JAR. En ese caso, la información de la firma pasa a formar parte del archivo de manifiesto incrustado. El JAR en sí no se firma, sino que cada archivo dentro del archivo comprimido se lista junto con su suma de verificación; son estas sumas de verificación las que se firman. Varias entidades pueden firmar el archivo JAR, modificándolo con cada firma, aunque los archivos firmados en sí mismos conservan su validez. Cuando el entorno de ejecución de Java carga archivos JAR firmados, puede validar las firmas y rechazar la carga de clases que no coincidan con la firma. También admite paquetes "sellados", en los que el cargador de clases solo permite que las clases 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, que se obtenga acceso a clases y datos con ámbito de paquete.
El contenido de los archivos JAR puede estar ofuscado 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. Los archivos JAR ejecutables tienen un manifiesto que especifica la clase de punto de entradaMain-Class: myPrograms.MyClass y una ruta de clases explícita (y el argumento -cp se ignora). Algunos sistemas operativos pueden ejecutarlos directamente con un clic. La invocación típica se realiza java -jar foo.jardesde la línea de comandos.
Es posible crear lanzadores nativos en la mayoría de las plataformas. Por ejemplo, los usuarios de Microsoft Windows que prefieren archivos EXE de Windows pueden usar herramientas como JSmooth, Launch4J, WinRun4J o Nullsoft Scriptable Install System para convertir archivos JAR individuales en ejecutables.
Manifiesto
Un archivo de manifiesto es un archivo de metadatos contenido dentro de un JAR. [ 6 ] [ 7 ] Define datos relacionados con la extensión y el paquete. Contiene pares nombre-valor organizados en secciones. Si un archivo JAR está destinado a ser utilizado como un archivo ejecutable, el archivo de manifiesto especifica la clase principal de la aplicación. El archivo de manifiesto se denomina MANIFEST.MF. El directorio del manifiesto debe ser la primera entrada del archivo comprimido.
Presupuesto
El manifiesto aparece en la ubicación canónicaMETA-INF/MANIFEST.MF . [ 8 ] Solo puede haber un archivo de manifiesto en un archivo comprimido 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.
Versión del manifiesto: 1.0
El nombre está separado de su valor por dos puntos. El manifiesto predeterminado muestra que cumple con la versión 1.0 de la especificación del manifiesto.
El manifiesto puede contener información sobre los demás archivos incluidos en el archivo comprimido. Su contenido depende del uso previsto del archivo JAR. El manifiesto predeterminado no presupone qué información debe registrar sobre otros archivos, por lo que su única línea contiene datos únicamente sobre sí mismo. Debe estar codificado en UTF-8.
Encabezados de manifiesto de propósito especial
Los archivos JAR creados únicamente con fines de archivado no utilizan el MANIFEST.MFarchivo.
La mayoría de los usos de los archivos JAR van más allá del simple archivado y la compresión, y requieren información especial en el archivo de manifiesto.
Características
El manifiesto permite a los desarrolladores definir varias características ú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 public static void main(String[] args)método. Esta información se proporciona en el encabezado Main-Class del manifiesto, que tiene la siguiente 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, un paquete dentro de un archivo JAR puede sellarse, lo que significa que todas las clases definidas en ese paquete se archivan en el mismo archivo JAR. Un paquete puede sellarse para garantizar la coherencia de versiones 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 por ejemplo:
Nombre : myCompany/myPackage/ Sellado : verdaderoEl valor del encabezado Name es la ruta relativa del paquete. Tenga en cuenta que termina con una '/' para distinguirlo de un nombre de archivo. Cualquier encabezado que siga a un encabezado Name, sin líneas en blanco intermedias, se aplica al archivo o paquete especificado en el encabezado Name. En el ejemplo anterior, debido a que el Sealedencabezado aparece después del Name: myCompany/myPackageencabezado sin líneas en blanco intermedias, el Sealedencabezado se aplica (solo) al paquete myCompany/myPackage.
La característica de los paquetes sellados ha quedado 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. [ 9 ]
Control de versiones de paquetes
Varios encabezados del manifiesto contienen información de versionado. Se puede asignar un conjunto de encabezados a cada paquete. Los encabezados de versionado aparecen justo debajo del encabezado Nombre del paquete. Este ejemplo muestra todos los encabezados de versionado:
Nombre : java/util/ Título de la especificación : "Clases de utilidad de Java" Versión de la especificación : "1.2" Proveedor de la especificación : "Sun Microsystems, Inc." Título de la implementación : "java.util" Versión de la implementación : "build57" Proveedor de la implementación : "Sun Microsystems, Inc."Lanzamiento múltiple
Un archivo JAR puede marcarse opcionalmente como JAR de múltiples versiones. El uso de esta función permite a los desarrolladores de bibliotecas cargar código diferente según la versión del entorno de ejecución de Java. [ 10 ] Esto, a su vez, permite a los desarrolladores aprovechar nuevas funciones sin sacrificar la compatibilidad.
Se habilita un archivo JAR de múltiples versiones mediante la siguiente declaración en el manifiesto:
Multilanzamiento : verdaderoDependencias
El MANIFEST.MFarchivo se puede utilizar para especificar todas las clases que deben cargarse para que una aplicación pueda ejecutarse. [ 11 ]
Tenga en cuenta que las entradas de Class-Path están delimitadas por espacios, no por el delimitador de ruta del sistema:
Ruta de clases : . pkg1.jar ruta/a/pkg2.jarCompatibilidad con Apache Ant Zip/JAR
La herramienta de compilación Apache Ant cuenta con su propio paquete para leer y escribir archivos Zip y JAR, incluyendo compatibilidad con extensiones de sistema de archivos Unix . El paquete org.apache.tools.zip se distribuye bajo la licencia de la 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:
- Los archivos WAR (Web application archive), también conocidos como archivos Java, almacenan archivos XML , clases Java, páginas JavaServer y otros objetos para aplicaciones web.
- Los archivos RAR (archivo de adaptador de recursos) (que no deben confundirse con el formato de archivo RAR ), también conocidos como archivos Java, almacenan archivos XML, clases Java y otros objetos para aplicaciones de la arquitectura de conectores J2EE (JCA).
- Los archivos EAR (Enterprise Archive) proporcionan archivos Java compuestos que combinan archivos XML, clases Java y otros objetos, incluidos los archivos de archivo Java JAR, WAR y RAR para aplicaciones empresariales.
- SAR (archivo de servicio) es similar a EAR. Proporciona un
service.xmlarchivo y archivos JAR complementarios. - APK (paquete de aplicación de Android), una variante del formato de archivo Java, se utiliza para aplicaciones de Android . [ 12 ]
- AAR (Android archive) se utiliza para la distribución de bibliotecas de Android , normalmente a través de Maven . [ 13 ]
- PAR (archivo de plan), compatible con el servidor de aplicaciones OSGi Eclipse Virgo , permite la implementación de aplicaciones OSGi de múltiples paquetes como un único archivo y proporciona aislamiento de otras aplicaciones basadas en PAR implementadas en el mismo servidor.
- KAR (archivo Karaf), compatible con el servidor de aplicaciones OSGi Apache Karaf , permite el despliegue de aplicaciones OSGi con múltiples paquetes y funciones.
Véase también
Referencias
- ↑ "Detalles de la extensión de archivo .JAR" . Consultado el 29 de noviembre de 2012 .
- ↑ "MIME : Glosario de Java" . Consultado el 29 de noviembre de 2012 .
- ↑ "Tarea de IANA" . Consultado el 12 de mayo de 2023 .
- ↑ "API y guías para desarrolladores relacionadas con el archivo JAR de Java de JDK 6" .
- ↑ "Especificación de archivo JAR" . Documentación de Java SE . Oracle. Archivado del original el 11 de septiembre de 2017.
- ↑ "Entendiendo el manifiesto" . Java.sun.com. 21 de marzo de 2003. Consultado el 31 de julio de 2012 .
- ↑ "Especificación del archivo JAR" . Download.oracle.com . Consultado el 31 de julio de 2012 .
- ↑ "Especificación del archivo JAR" . Download.oracle.com . Consultado el 31 de julio de 2012 .
- ↑ "JEP 261: Sistema de módulos" . Consultado el 6 de febrero de 2021 .
- ↑ "JEP 238: Archivos JAR de múltiples versiones" . Consultado el 6 de febrero de 2021 .
- ↑ la especificación del servlet de Sun, página 72 (servlet-2_4-fr-spec.pdf). Véase también las Notas técnicas de Java .
- ↑ "Glosario" . developer.android.com .
- ↑ "Biblioteca de Android" . developer.android.com .
Enlaces externos
- Especificación del archivo JAR
- Descripción general del archivo JAR
- Formatos de archivo
- Java (plataforma de software)