stringtranslate.com

JAR (formato de archivo)

Un archivo JAR ("archivo Java") es un formato de archivo de paquete que se utiliza normalmente 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 creados en formato ZIP y normalmente tienen una .jar extensión de archivo . [5]

Diseño

Un archivo JAR permite que los entornos de ejecución de Java implementen de manera eficiente una aplicación completa, incluidas sus clases y los 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 del archivo de manifiesto describen cómo utilizar el archivo JAR. Por ejemplo, una entrada de Classpath se puede utilizar para especificar otros archivos JAR que se cargarán 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 Java Development Kit.

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 integrado. El JAR en sí no está firmado, sino que cada archivo dentro del archivo se enumera junto con su suma de comprobación; son estas sumas de comprobación las que están firmadas. Varias entidades pueden firmar el archivo JAR, modificando el archivo JAR en sí con cada firma, aunque los archivos firmados siguen siendo válidos. Cuando el entorno 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 solo permitirá que se carguen 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, se obtenga acceso a las clases y los datos del ámbito del 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 el programa. Los archivos JAR ejecutables tienen el manifiesto que especifica la clase del punto de entradaMain-Class: myPrograms.MyClass y una ruta de clase explícita (y se ignora el argumento -cp). Algunos sistemas operativos pueden ejecutarlos directamente al hacer clic en ellos. La invocación típica se realiza java -jar foo.jardesde una línea de comandos.

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 convertir archivos JAR individuales en ejecutables.

Manifiesto

Un archivo de manifiesto es un archivo de metadatos contenido en un JAR. [6] [7] Define la extensión y los datos relacionados con 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.

Presupuesto

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 se separa de su valor mediante 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 que se encuentran en el archivo. El contenido del manifiesto depende del uso que se le quiera dar al archivo JAR. El archivo de manifiesto predeterminado no hace suposiciones sobre qué información debe registrar sobre los demás archivos, por lo que su única línea contiene datos solo sobre sí mismo. Debe estar codificado en UTF-8.

Encabezados de manifiesto para propósitos especiales

Los archivos JAR creados únicamente con el propósito de archivar 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 Main-Class del manifiesto, que tiene el formato general:

Clase principal: com.example.MyClassName

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

Sellado de paquetes

De manera opcional, 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 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:

Nombre : miEmpresa/miPaquete/ Sellado : verdadero  

El valor del encabezado Name es la ruta relativa del paquete. Tenga en cuenta que termina con un '/' 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 debido al Sistema de Módulos de la Plataforma Java introducido en Java 9, en el que los módulos no pueden dividir los paquetes. [9]

Control de versiones de paquetes

Varios encabezados de manifiesto contienen información de control 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/ Título de la especificación : "Clases de utilidad 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 un archivo jar de múltiples versiones. El uso de la función de múltiples versiones 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 las nuevas funciones sin sacrificar la compatibilidad.

Se habilita un jar de múltiples versiones 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 

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, que incluye compatibilidad con extensiones de sistemas de archivos Unix . El paquete org.apache.tools.zip se publica bajo la licencia Apache Software Foundation y está diseñado para usarse fuera de Ant.

Formatos relacionados

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

Véase 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. ^ "API y guías para desarrolladores relacionadas con JDK 6 Java Archive (JAR)".
  5. ^ "Especificación de archivo JAR". Documentación de Java SE . Oracle. Archivado desde el original el 11 de septiembre de 2017.
  6. ^ "Entendiendo el Manifiesto". Java.sun.com. 2003-03-21 . Consultado el 2012-07-31 .
  7. ^ "Especificación del archivo JAR". Download.oracle.com . Consultado el 31 de julio de 2012 .
  8. ^ "Especificación del archivo JAR". Download.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 múltiples versiones" . Consultado el 6 de febrero de 2021 .
  11. ^ La especificación del servlet Sun, página 72 (servlet-2_4-fr-spec.pdf). Véase también las Notas técnicas de Java.
  12. ^ "Glosario". developer.android.com .
  13. ^ "Biblioteca de Android". developer.android.com .

Enlaces externos