¿Qué es el formato de archivo JAR?
Los archivos con la extensión .jar son archivos ZIP utilizados por la plataforma Java para agrupar archivos .class compilados, metadatos y recursos -como imágenes, archivos de texto y datos de configuración- en un único paquete portátil. El formato se introdujo con el JDK 1.1 y sigue siendo la unidad de distribución principal para bibliotecas y aplicaciones Java.
Un archivo .jar puede funcionar como un ejecutable independiente cuando su archivo META-INF/MANIFEST.MF especifica una entrada Main-Class. Cuando se lanza con java -jar file.jar, la JVM lee este atributo e inicia la clase designada, permitiendo a los desarrolladores distribuir una aplicación completa como un solo archivo que se ejecuta en cualquier sistema con un entorno de ejecución compatible instalado. Cada entrada individual dentro del archivo también puede comprimirse de forma independiente utilizando el algoritmo DEFLATE, lo que reduce el tamaño del paquete permitiendo al mismo tiempo un acceso aleatorio rápido a los archivos individuales.
Entre los metadatos que transporta un .jar, el archivo META-INF/MANIFEST.MF es el más importante: define cómo se utiliza el paquete, enumera las dependencias de la ruta de clases a través de Class-Path y puede contener atributos de seguridad. Las firmas digitales se almacenan como archivos .SF y .DSA/.RSA separados dentro de META-INF/, no en el propio manifiesto. Java 9 introdujo dos características adicionales: los JAR multiversión (Multi-Release JARs) colocan versiones específicas de clases bajo META-INF/versions/N/, y los JAR modulares incluyen un module-info.class en la raíz del archivo.
Para explorar o extraer el contenido de un archivo .jar, puedes usar cualquier herramienta de descompresión ZIP estándar y realizar las mismas acciones que con un archivo normal; cambiarle el nombre a .zip funciona igual de bien. También puedes usar el comando jar incluido con el JDK:
- Listar contenido:
jar -tf file.jar - Extraer:
jar -xf file.jar - Ejecutar (si es ejecutable):
java -jar file.jar
Los formatos de archivo relacionados del lado del servidor incluyen archivos .war para aplicaciones web y archivos .ear para aplicaciones empresariales, ambos basados en la misma estructura ZIP.
Seguridad y protección
RIESGO: MEDIUMUn JAR ejecutable es un programa real: con Java instalado, «java -jar» ejecuta cualquier código que contenga, con los permisos de tu usuario; por lo tanto, un JAR desconocido puede contener malware (los RAT y troyanos de Java son una familia conocida). Trata un JAR descargado como cualquier .exe: ejecuta solo los de fuentes en las que confíes y desconfía de los archivos .jar adjuntos no solicitados. Simplemente inspeccionarlo como un ZIP (7-Zip) es seguro; ejecutarlo es el riesgo. Un JAR puede estar firmado digitalmente, pero una firma solo prueba el origen, no la seguridad.
Detalles del formato
en pocas palabrasProgramas que abren archivos JAR
Detalles técnicos
especificación profunda| Formato contenedor | Archivo ZIP - comparte los magic bytes `PK` (`50 4B 03 04`) en el desplazamiento 0 con todos los archivos ZIP estándar |
| Tipo MIME | `application/java-archive` |
| Archivo interno requerido | `META-INF/MANIFEST.MF` - debe estar presente; controla los metadatos, la ruta de clases y el comportamiento ejecutable |
| Activador de JAR ejecutable | Atributo `Main-Class` en `MANIFEST.MF`; se lanza con `java -jar file.jar` |
| Formato de bytecode de carga útil | Archivos `.class` compilados que contienen bytecode de JVM - independiente de la plataforma, no es código máquina nativo |
| Compresión por entrada | Algoritmo DEFLATE (igual que ZIP); las entradas individuales también pueden almacenarse sin comprimir para un acceso aleatorio más rápido |
| Firmas digitales | Archivo de firma `.SF` emparejado con un archivo de clave `.DSA` o `.RSA`, ambos almacenados dentro de `META-INF/` |
| Declaración de ruta de clases | El atributo de manifiesto `Class-Path` enumera los JAR dependientes separados por espacios para la resolución en tiempo de ejecución |
| JAR multiversión (MR-JAR) | Java 9+; versiones específicas de clases bajo `META-INF/versions/N/` para que las JVM más nuevas elijan el bytecode correcto |
| Descriptor de módulo (JPMS) | Un JAR modular incluye `module-info.class` en la raíz del archivo, habilitando el sistema de módulos de Java 9+ |
| Sellado de paquetes | `Sealed: true` en el manifiesto evita que otros JAR inyecten clases en el mismo paquete en tiempo de ejecución |
| Uber/Fat JAR | Variante de despliegue autónoma que incrusta todos los JAR de dependencia; requiere un cargador de clases personalizado como Spring Boot Loader |
| Lanzado | 1996-1997 (JDK 1.1) |
| Estándar abierto | Sí · libre de regalías |
| Especificación | docs.oracle.com |
Conversiones de JAR
Preguntas y respuestas de la comunidad
preguntado por usuariosAún no hay preguntas; sea el primero en preguntar sobre los archivos JAR.