Implementación del paquete JAR
El paquete JAR se puede empaquetar utilizando la Directiva JAR. Entrar jar en la línea de comandos puede ver el contenido de la directiva jar
De los dos ejemplos que se muestran en el último espectáculo, hay dos formas de empaquetar. La diferencia entre los dos es si usar el archivo manifiesto manifiesto que definió. El primer ejemplo no está empaquetado utilizando el archivo manifiesto, por lo que el archivo manifiesto en el paquete JAR generado final es el archivo predeterminado. Este método es adecuado para una estructura de paquete JAR relativamente simple, no hay otra dependencia del paquete JAR y el paquete JAR generado no necesita ser ejecutable. El paquete JAR generado de esta manera no se puede ejecutar utilizando el comando java -jar XXX.jar porque la entrada del programa no se especifica en el archivo manifiesto. La segunda instancia es un método de empaque relativamente común, es decir, use un archivo de manifiesto personalizado para participar en el empaque, para que pueda agregar dependencias al paquete y especificar la entrada del programa para implementar java -jar XXX.jar para ejecutar directamente el paquete JAR.
El primer método de empaque simple
Lo más fácil es empaquetar y emitir el archivo ByTecode de clase compilado en la carpeta actual. Los ejemplos son los siguientes:
Escriba tres archivos Java, test1.java test2.java y main.java
public class test1 {public static void main (string [] args) {} public void display () {System.out.println ("Esta es la clase Test1"); }}y archivo test2.java
public class test2 {public static void main (string [] args) {} public void display () {System.out.println ("Esta es la clase test2"); }}Main.java
public class Main {public static void main (string [] args) {for (string a: args) {system.out.println ("parámetro gived"+a); } test1 t1 = new test1 (); t1.display (); test2 t2 = new test2 (); t2.display (); }} Compile estos tres archivos en la línea de comando y use el comando JAVAC para compilar.
Use la directiva JAR para empaquetar el archivo de clase compilada
La lista agregada se muestra durante el embalaje. Use la herramienta de descompresión para abrir el paquete test.jar generado y puede ver la siguiente estructura:
Además de los tres archivos de clase compilados, hay una carpeta Meta-INF adicional, que contiene un manifest.mf (archivo de lista). El papel de este archivo es muy importante, como se explica más adelante. Veamos el contenido primero
Manifiestas muy simples, solo contiene la versión manifiesta y la versión Java.
La ejecución de java -jar test.jar en este momento tiene el siguiente efecto:
No se informa un error de atributo de la lista principal. Esto se debe a que usamos el primer método para generar el fras utilizando el manifiesto predeterminado. El manifiesto predeterminado no especifica la entrada del programa, por lo que ocurre un error.
Puede cambiar directamente el archivo de manifiesto en el paquete JAR (abra la herramienta de descompresión y guardarlo después de cambiarlo) y cambiarlo al siguiente efecto:
Después de ejecutar java -jar test.jar nuevamente, el programa ingresa al contenido correcto:
El atributo de clase principal se agrega al archivo manifiesto y especifica la entrada del programa, que realiza la ejecución directa del archivo JAR.
Por lo tanto, el uso del manifiesto predeterminado no puede ejecutar directamente el archivo JAR. Use el archivo de manifiesto que defina para empaquetarlo o cambiar el archivo de manifiesto en el paquete.
La segunda forma de empacar
El segundo método de empaque es más general. En términos generales, la primera línea del archivo Java es package XXX; Es decir, el nombre del paquete, también determina la ruta del archivo de clase compilado. Cuando hay múltiples archivos Java para compilar y empaquetar y tienen diferentes nombres de paquetes, es muy poco realista escribir un archivo en un momento en que lo empaquete de acuerdo con el primer método, por lo que hay un segundo método. Coloque todos los directorios que existen en los archivos de clase que se empaquetan y los paquetes JAR de dependencia en una carpeta raíz (como Foo), y luego escriba un archivo manifiesto manifiesto para especificar la entrada del programa y otros paquetes JAR de dependencia agregados. Al ejecutar el comando:
Tenga en cuenta que hay un espacio y un punto detrás foo/ en el comando de arriba
Veamos un ejemplo a continuación
Lo mismo es Test1.java, test2.java y main.java, pero cada uno tiene sus propios nombres de paquetes.
paquete cn.mytest1; public class test1 {public static void main (string [] args) {} public void display () {System.out.println ("Esta es la clase Test1"); }} paquete cn.mytest2; public class test2 {public static void main (string [] args) {} public void display () {System.out.println ("Esta es la clase test2"); }} paquete cn.mymain; import cn.mytest1.test1; import cn.mytest2.test2; public class Main {public static void main (string [] args) {para (string item: args) {system.out.println ("pase parámetro"+item); } test1 t1 = new test1 (); test2 t2 = new test2 (); t1.display (); t2.display (); }} También compilado con la directiva JAVAC, los tres archivos de clase existen en diferentes rutas porque sus nombres de paquetes son diferentes. Coloque todas las carpetas compiladas que contienen archivos de clase en la carpeta FOO:
Luego escriba un archivo manifiesto fuera de Foo:
El contenido del manifiesto es el siguiente:
Nota : La última línea del archivo manifiesto es una línea vacía.
Ejecute el comando desde la línea de comando: jar cvfm test.jar MANIFEST.MF -C foo/ .
Pruebe si el paquete JAR se puede ejecutar directamente en la línea de comando, use el comando java -jar test.jar
Empaque correctamente y ejecute el frasco con éxito.
Introducción del archivo manifiesto
A través de los dos ejemplos anteriores, podemos ver que el archivo manifiesto es necesario para el empaque JAR. El archivo manifiesto describe la información detallada del archivo jar empaquetado y existe en la carpeta meta-INF empaquetada. El contenido principal de un archivo de manifiesto simple es el siguiente:
Lo principal es que los tres atributos de la ruta de clase de la clase principal manifiesta son muy importantes al hacer paquetes de jarra. Manifest-Version es el número de versión, simplemente escríbelo en consecuencia. Main-Class es el programa de entrada del paquete JAR, que especifica el nombre completo de la clase de ejecución (debe incluir el nombre del paquete). De esta manera, puede usar java -jar name.jar para ejecutar el paquete JAR directamente. El tercer ritmo de clase se refiere a otros paquetes JAR en los que se deben confiar cuando se empaqueta. Al empaquetar, su programa también puede contener otros paquetes JAR, por lo que debe agregar dependencias.
Tenga en cuenta que hay un espacio entre el colon y el contenido de cada atributo manifiesto, y debe haber una línea en blanco al final después de escribir, de lo contrario todavía habrá un error en el tiempo de ejecución de que el atributo de la lista principal no se puede encontrar.
resumen
Lo fácil de cometer errores en los archivos JAR de empaquetado es la escritura de archivos manifiestos manifiestos, que son propensos a formatear errores como pocos espacios entre el colon del atributo y el contenido, no hay espacios entre la adición de dependencias en el ritmo de clase, demasiadas dependencias, ningún espacio al comienzo de cada línea al escribir múltiples líneas, no hay líneas en blanco al final del archivo, etc. Preste atención a estos puntos clave cuando los archivos clave cuando no escriban los archivos de la paquete.
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.