stringtranslate.com

JAR (formato de archivo)

Un archivo JAR ("archivo Java") es un formato de archivo de paquete que normalmente se utiliza para agregar 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 de almacenamiento que incluyen un archivo de manifiesto específico de Java . Están construidos en formato ZIP y normalmente tienen una .jar extensión de archivo . [5]

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 pueden comprimirse, 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 del archivo de manifiesto describen cómo utilizar el archivo JAR. Por ejemplo, se puede utilizar 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 jarutilidad de línea de comandos proporcionada por el kit de desarrollo de Java.

Seguridad

Los desarrolladores pueden firmar digitalmente 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 está firmado, sino que cada archivo dentro del archivo aparece junto con su suma de verificación; son estas sumas de verificación las que están firmadas. Varias entidades pueden firmar el archivo JAR, cambiando el archivo JAR con cada firma, aunque los 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 admitir paquetes 'sellados', en los que el cargador de clases sólo permitirá cargar clases Java 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 dentro del alcance 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 cualquier biblioteca que utilice el programa. Los archivos JAR ejecutables tienen el manifiesto que especifica la clase de punto de entradaMain-Class: myPrograms.MyClass con una ruta de clase explícita (y el argumento -cp se ignora). Algunos sistemas operativos pueden ejecutarlos directamente al hacer clic en ellos. La invocación típica es java -jar foo.jardesde una línea de comando.

Se pueden crear lanzadores nativos 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 empaquetar archivos JAR individuales en archivos 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 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 debe ser la primera entrada del archivo comprimido.

Especificaciones

El manifiesto aparece en la ubicación canónicaMETA-INF/MANIFEST.MF . [8] 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 Java Development Kit es el siguiente.

Versión del manifiesto: 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 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 archivarlos no utilizan el MANIFEST.MFarchivo.

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 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 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 del manifiesto Main-Class, que tiene la forma general:

Clase principal: com.ejemplo.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 coherencia de las 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 : miEmpresa/miPaquete/ Sellado : verdadero  

El valor del encabezado Nombre es la ruta relativa 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 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 paquetes sellados ha quedado obsoleta gracias al Java Platform Module System introducido en Java 9, en el que los módulos no pueden dividir paquetes. [9]

Versiones de paquetes

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

Nombre : java/util/ Título de especificación : "Clases de utilidades Java" Versión de especificación : "1.2" Proveedor de especificación : "Sun Microsystems, Inc." Título de implementación : "java.util" Versión de implementación : "build57" Proveedor de implementación : "Sun Microsystems, Inc."       

Lanzamiento múltiple

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

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

Lanzamiento múltiple : verdadero 

Dependencias

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 con espacios, no con el delimitador de ruta del sistema:

Ruta de clase : . pkg1.jar ruta/a/pkg2.jar 

Soporte 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 extensiones del sistema de archivos Unix . El paquete org.apache.tools.zip se publica bajo la licencia Apache Software Foundation y está diseñado para poder utilizarse fuera de Ant.

Formatos relacionados

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

Ver también

Referencias

  1. ^ "Detalles de la extensión de archivo .JAR" . Consultado el 29 de noviembre de 2012 .
  2. ^ "MIME: Glosario de Java" . Consultado el 29 de noviembre de 2012 .
  3. ^ "Asignación de la IANA" . Consultado el 12 de mayo de 2023 .
  4. ^ "Guías para desarrolladores y API relacionadas con JDK 6 Java Archive (JAR)".
  5. ^ "Especificación del archivo JAR". Documentación de Java SE . Oráculo. Archivado desde el original el 11 de septiembre de 2017.
  6. ^ "Comprensión del manifiesto". Java.sun.com. 2003-03-21 . Consultado el 31 de julio de 2012 .
  7. ^ "Especificación del archivo JAR". Descargar.oracle.com . Consultado el 31 de julio de 2012 .
  8. ^ "Especificación del archivo JAR". Descargar.oracle.com . Consultado el 31 de julio de 2012 .
  9. ^ "JEP 261: Sistema de módulos" . Consultado el 6 de febrero de 2021 .
  10. ^ "JEP 238: archivos JAR de versiones múltiples" . Consultado el 6 de febrero de 2021 .
  11. ^ la especificación del servlet sun, página 72 (servlet-2_4-fr-spec.pdf). Consulte también las notas técnicas de Java.
  12. ^ "Glosario". desarrollador.android.com .
  13. ^ "Biblioteca de Android". desarrollador.android.com .

enlaces externos