Trabajando con archivos JAR y Manifest en Java

Requisito previo: formato de archivo JAR

Cada vez que un desarrollador quiere distribuir una versión de su software, todo lo que quiere es distribuir un solo archivo y no una estructura de directorio llena de archivos de clase. Los archivos JAR fueron diseñados para este propósito. Un archivo JAR puede contener archivos de clase y otros tipos de archivos, como archivos de sonido e imagen, que pueden incluirse en el proyecto. Todos los archivos de un archivo JAR se comprimen con un formato similar a zip.

Creación de un archivo JAR: más opciones

Un archivo jar se crea usando la herramienta jar. El comando general se parece a esto:

 jar options jar-file [manifest-file] file1 file2 file3 ...
  • jar – archivo: nombre del archivo jar en el que desea utilizar la herramienta jar.
  • archivo1, archivo2, archivo3: archivos que desea agregar dentro de un archivo jar. manifest-file es el nombre del archivo que contiene el manifiesto de ese archivo jar, dar manifest-file como argumento es completamente opcional.
  • c : crea un archivo nuevo o vacío y le agrega archivos. Si alguno de los nombres de archivo especificados son directorios, el programa jar los procesa recursivamente.
  • C : Cambia temporalmente el directorio.
  • e : crea un punto de entrada en el manifiesto.
  • f : especifica el nombre del archivo JAR como el segundo argumento de la línea de comandos. Si falta este parámetro, jar escribirá el resultado en la salida estándar (al crear un archivo JAR) o lo leerá desde la entrada estándar (al extraer o tabular un archivo JAR).
  • i : crea un archivo de índice.
  • m : agrega un archivo de manifiesto al archivo JAR. Un manifiesto es una descripción del contenido y el origen del archivo. Cada archivo tiene un manifiesto predeterminado, pero puede proporcionar el suyo propio si desea autenticar el contenido del archivo.
  • M : No crea un archivo de manifiesto para las entradas.
  • t : Muestra la tabla de contenido.
  • u : Actualiza un archivo JAR existente.
  • v : Genera una salida detallada.
  • x: Extraer archivos. Si proporciona uno o más nombres de archivo, solo se extraen esos archivos. De lo contrario, se extraen todos los archivos.
  • 0 : Tiendas sin compresión zip.

Las opciones del comando jar son casi similares a las del comando tar de UNIX. En Windows también puede obtener ayuda sobre varias opciones del comando jar simplemente escribiendo jar en cmd y luego presionando enter, el resultado será algo similar a esto:

jar command options

Ejemplo :

Para crear un archivo JAR que tenga dos clases server.class y client.class y una imagen Jpeg logo.jpeg, es necesario escribir el siguiente comando:

 jar cvf chat.jar server.class client.class logo.jpeg

La salida del comando anterior será algo así:

Es una mejor práctica usar la opción -v junto con el comando jar, ya que sabrá cómo van las cosas.

Archivo de manifiesto

Cada archivo JAR contiene un archivo de manifiesto que describe las características del archivo. Cada archivo JAR tiene un archivo de manifiesto por defecto. El archivo de manifiesto predeterminado se denomina MANIFEST.MF y está presente en el subdirectorio META-INF del archivo. Aunque el archivo de manifiesto predeterminado contiene solo dos entradas, los archivos de manifiesto complejos pueden tener muchas más. Así es como se ve un archivo de manifiesto predeterminado:

Default manifest

Las entradas de los archivos de manifiesto se agrupan en secciones. Cada sección tiene dos entradas, el nombre de la sección y su valor. Veremos un poco más adelante cómo estas secciones realmente pueden ayudarnos a controlar las propiedades de nuestro archivo. El archivo de manifiesto también se puede actualizar mediante la opción m del comando jar. Pero hay ciertas cosas que deben tenerse en cuenta al actualizar el archivo de manifiesto; de lo contrario, puede recibir el siguiente mensaje espeluznante.

 java.io.IOException: invalid manifest format

Cosas a tener en cuenta al manejar archivos de Manifiesto:

  1. Debe dejar espacio entre el nombre y el valor de cualquier sección en el archivo de manifiesto, como la Versión: 1.1 está en la sección válida en su lugar, escriba la Versión: 1.1, ese espacio entre dos puntos y 1.1 realmente importa mucho.
  2. Al especificar la clase principal, no debe agregar la extensión .class al final del nombre de la clase. Simplemente especifique la clase principal escribiendo:
    Main-Class: Classname

    (Estaré informando sobre la sección de clase principal muy pronto).

  3. Debe agregar una nueva línea al final del archivo. No necesita escribir \n para especificar una nueva línea, sino que deje en blanco la última línea de su archivo de manifiesto que servirá para ese propósito.
  4. El archivo de texto para el manifiesto debe usar la codificación UTF-8; de lo contrario, puede tener problemas.

Ejemplo:

Ahora regresemos y actualicemos el contenido de nuestro archivo chat.jar. Para actualizar el archivo de manifiesto simplemente necesitamos escribir el siguiente comando:

 jar uvfm chat.jar manifest.txt

Aquí manifest.txt es el nuevo archivo de manifiesto, que tiene los siguientes contenidos:

manifest.txt

La salida del comando anterior será algo así:

null

Aquí recibimos dos advertencias porque estamos tratando de sobrescribir entradas previamente presentes.

Archivos jar ejecutables

Puede usar la opción e del comando jar para especificar el punto de entrada de su programa, es decir. clase que normalmente desea invocar al iniciar su aplicación Java.

Ejemplo:

Para crear un archivo chat.jar que tenga la clase de cliente como clase principal, debe escribir el siguiente comando:

 jar cvfe chat.jar client client.class server.class logo.jpeg

La salida del comando anterior será algo así:

Recuerde no agregar la extensión .class después del nombre de la clase que desea establecer como clase principal.

Alternativamente, puede agregar una entrada de clase principal en el archivo de manifiesto y luego actualizarlo. Para el ejemplo anterior, solo necesita agregar esta entrada:

 Main-Class: client

Con la configuración de la clase principal, uno puede simplemente ejecutar un programa jar escribiendo el siguiente comando:

 java -jar chat.jar

Dependiendo de la configuración del sistema operativo, los usuarios pueden incluso iniciar la aplicación haciendo doble clic en el icono del archivo JAR.

Sellado de paquetes

Finalmente, vamos a discutir sobre el sellado de paquetes en Java. Podemos sellar un paquete en Java para garantizar que no se le agreguen más clases. Es posible que desee sellar un paquete si usa un paquete de clases, métodos y campos visibles en su código. Sin el sellado del paquete, otras clases pueden agregarse al mismo paquete y, por lo tanto, obtener acceso a las funciones visibles del paquete.

  • Para lograr el sellado del paquete, todo lo que se necesita hacer es poner todas las clases de ese paquete en un archivo JAR.
  • De forma predeterminada, los paquetes en un archivo jar no están sellados, pero se puede cambiar el valor predeterminado global agregando algunas líneas en el archivo de manifiesto.
  • Consideremos nuevamente el caso de nuestro archivo chat.jar, ahora el paquete de clases client.class y server.class es una aplicación y queremos sellar este paquete, todo lo que debemos hacer es agregar la siguiente línea en el archivo de manifiesto y actualizarlo. .
     Name: application
    Sealed: true

Esto es todo por mi parte sobre cómo trabajar con archivos JAR. ¡¡Manténganse al tanto!!

Este artículo es una contribución de Abhey Rana (UselessCoder) . Si le gusta GeeksforGeeks y le gustaría contribuir, también puede escribir un artículo usando contribuya.geeksforgeeks.org o envíe su artículo por correo a contribuya@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.

Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *