Este artículo describe en detalle el uso del comando JAR, lo que será útil para que todos aprendan y resuman el uso del comando jar. Los detalles son los siguientes:
El paquete JAR es un documento comprimido único en Java. De hecho, todos pueden entenderlo como un paquete .zip. Por supuesto, existen diferencias. Hay un archivo META-INF/MANIFEST.MF en el paquete JAR. Cuando encuentre el paquete JAR, se generará automáticamente.
El paquete JAR se genera mediante el comando /bin/jar.exe del directorio de instalación del JDK. Cuando instalamos el JDK y configuramos la ruta, podemos usar el comando jar.exe normalmente. Utilizará las clases en lib/tool.jar. paquete de herramientas. No te preocupes por estos detalles.
Veamos cómo se utiliza:
1. parámetros del comando jar:
Formato del comando jar: jar {ctxuf}[vme 0 M i][-directorio C] nombre de archivo...
Entre ellos se debe seleccionar uno de los cuatro parámetros {ctxu}. [vfme 0 M i ] es un parámetro opcional y el nombre del archivo también es obligatorio.
-c crea un paquete jar
-t muestra una lista de contenidos en el jar
-x descomprimir el paquete jar
-u agrega archivos al paquete jar
-f especifica el nombre de archivo del paquete jar
-v genera informes detallados y los envía a dispositivos estándar
-m especifica el archivo manifest.mf (puede realizar algunas configuraciones para el paquete jar y su contenido en el archivo manifest.mf).
-0 no comprime el contenido del paquete jar al generarlo
-M No genera un archivo de manifiesto (Manifest.mf) para todos los archivos. Este parámetro es el mismo que la configuración que ignora el parámetro -m.
-i crea un archivo de índice para el archivo jar especificado
-C significa ir al directorio correspondiente para ejecutar el comando jar, lo que equivale a cd a ese directorio, y luego ejecutar el comando jar sin -C
2. Ejemplos de uso de tarros:
(1) Crear paquete jar
jar cf hola.jar hola
Utilice el directorio de prueba para generar el paquete hello.jar. Si hello.jar existe, se sobrescribirá.
(2) Crear y mostrar el proceso de embalaje.
jar cvf hola.jar hola
Utilice el directorio hello para crear el paquete hello.jar y muestre un ejemplo del proceso de creación:
E:/>jar cvf hola.jar hola
Manifiesto
Agregar: hola/(leer = 0) (escribir = 0) (0% almacenado)
Agregado: hola/TestServlet2.class (lectura = 1497) (escritura = 818) (comprimido en 45%)
Agregado: hola/HelloServlet.class (lectura = 1344) (escritura = 736) (comprimido en 45%)
Agregado: hola/TestServlet1.class (lectura = 2037) (escritura = 1118) (comprimido en 45%)
(3) Paquete de frasco de exhibición:
jar tvf hello.jar Ver el contenido del paquete hello.jar. El paquete jar especificado debe existir realmente; de lo contrario, se producirá FileNoutFoundException.
(4) Descomprima el paquete del frasco:
jar xvf hola.jar
Descomprima hello.jar en el directorio actual
(5) Agregar archivos al jar:
jar uf hola.jar HolaMundo.java
Agregue HelloWorld.java al paquete hello.jar
(6) Cree un paquete jar de contenido sin comprimir:
jar cvf0 hola.jar *.clase
Genere un paquete jar sin comprimir utilizando todos los archivos .class en el directorio actual
(7) Cree un paquete jar con el archivo manifest.mf:
jar cvfm hola.jar manifest.mf hola
El paquete jar creado tiene un directorio META-INF adicional, y el directorio META-INF tiene un archivo manifest.mf adicional. En cuanto a la función de manifest.mf, se mencionará más adelante.
(8) Ignore el archivo manifest.mf:
jar cvfM hola.jar hola
El paquete jar generado no incluye el directorio META-INF ni el archivo manifest.mf.
(9) Agregar aplicación -C:
jar cvfm hola.jar mymanifest.mf -C hola/
Significa cambiar al directorio de saludo y luego ejecutar el comando jar.
(10) -i genera una lista de índice para el archivo jar:
Cuando el contenido de un paquete jar es muy bueno, puede generar un archivo de índice para él, lo que parece muy sencillo.
jar yo hola.jar
Después de ejecutar este comando, generará un archivo de índice llamado INDEX.LIST en la carpeta META-INF del paquete hello.jar. Generará una lista con el nombre del paquete jar en la parte superior.
(11) Exportar la lista de descompresión:
jar tvf hello.jar >hello.txt Si desea ver el proceso detallado de descomprimir un jar y el paquete jar es grande, la información de la pantalla parpadeará. En este momento, puede generar la lista en un archivo. ¡Aprecia poco a poco!
(12)jar -cvf hola.jar hola/*
Por ejemplo, la estructura del directorio original es la siguiente:
Hola
|---com
|---org
Originalmente quería empaquetar solo el directorio com y el directorio org, pero en este momento el comando jar se empaquetará junto con hello. Todo el mundo debería prestar atención a esto. El archivo comprimido generado por el comando jar incluirá el directorio que le sigue. Deberíamos ingresar al directorio de saludo y ejecutar el comando jar.
Nota: El usuario puede especificar el nombre del archivo manifest.mf de forma arbitraria, pero el comando jar solo reconoce Manifest.mf. Convertirá el nombre del archivo especificado por el usuario en consecuencia, por lo que el usuario no debe preocuparse.
3.Reglas de escritura del archivo Manifest.mf:
Debes prestar atención a algunos detalles al escribir manifest.mf. Es muy exigente. He encontrado muchos errores aquí. ¿Quién lo hace tan tacaño?
(1) Donde no puede haber líneas o espacios en blanco, la primera línea no puede ser una línea en blanco (no puede haber una línea en blanco antes de la primera línea), no puede haber una línea en blanco entre líneas y no puede haber una línea en blanco en Al final de la línea hay espacios.
(2) Debe haber una línea en blanco y la última línea debe ser una línea en blanco (simplemente agregue un retorno de carro después de ingresar su contenido)
(3) Debe haber un espacio
clave: el valor debe escribirse con un espacio después del punto y coma
4. Cómo usar clases en paquetes jar
¡Escribamos un pequeño ejemplo, tan intuitivo!
persona de clase final pública { public static int age() { return 30 }}-> javac Persona.java->jar cvf persona.jar Persona.clase
Convierta el archivo anterior en un paquete jar
Escribe otra clase para llamarla:
clase pública MyAge{ public static void getAge() { System.out.println(Person.age() }}->javac MiEdad.java ->java -classpath person.jar MiEdad
Los lectores interesados pueden depurar este programa.
5. Cree un paquete jar ejecutable
A veces, cuando escribes un programa tú mismo, hay muchas clases y, con el tiempo, ni siquiera sabes cuál es la clase principal. Además, es posible que se utilicen muchas imágenes u otros archivos, lo que lo hace confuso. para leer En este momento, puede considerar convertirlo en un paquete jar ejecutable...
(1) Edite el archivo manifest.mf y agregue la siguiente línea
Clase principal: MyApplet
Nota: Se determina el tamaño de Main-Class, se debe ingresar el espacio después de los dos puntos y Enter después de MyApplet y luego guardar.
(2) Embalaje
jar cvfm PrimerApplet.jar manifest.mf MiApplet.clase
Nota: manifest.mf se especifica como la ruta de clase (como: hola.Hola) o nombre de archivo (applet) donde se almacena el archivo Mani-Class: MyApplet.
(3) Uso de jar ejecutable
java -jar PrimerApplet.jar
También se puede utilizar en <applet></applet>:
<código de subprograma=MiApplet archivo=PrimerApplet.jar ancho=200 alto=100></applet>
Nota: La clase no se proporciona. Puede simplemente escribir una. Puede decidir el nombre de la clase y el nombre del paquete como desee.
6. Amplía tus propias clases
En el directorio de instalación de JDK/jre/lib/ext, SUN nos brinda la comodidad de expandir nuestras propias clases. Puede escribir sus propios archivos de clase en paquetes .jar y colocarlos en este directorio. Lo instala la clase ExtClassLoader. El cargador de clases es responsable de la carga y el cargador de clases ExtClassLoader es AppClassL El cargador principal del cargador de clases, AppClassLoader, es el principal responsable de cargar archivos en la ruta CLASSPATH, y el mecanismo utilizado en Java es delegar el cargador principal, por lo que los archivos de clase en el jar almacenados en este directorio no tienen ningún settings, el cargador de clases puede encontrar la carga normal, ¿no es muy conveniente?
Si su .jar es para aplicaciones de subprograma, puede agregar las dos líneas siguientes a su manifest.mf antes de empaquetarlo en un paquete jar.
Ruta de clase: FirstApplet.jarRuta de clase: SecondApplet.jarClase principal: MiApplet
Nota: La ruta de clase se puede configurar en varios elementos, simplemente escriba el nombre del paquete jar directamente. Main-Class se usa principalmente cuando hay varios archivos de clase .class en el jar. Java no sabe cuál es la clase principal, por lo que debe especificarse. Si solo hay una clase en el paquete jar, por supuesto que sí. No es necesario especificarlo.
El orden en el que Java llama a las clases: Clases en java/lib/ext ---> Clases especificadas en Manifest.mf --> Clases en el directorio actual --> Clases especificadas en set CLASSPATH.
7. Llame al paquete jar en la red URL.
(1) Generar la URL del paquete jar
URL u=nueva URL("jar:"+"FirstAppplet.jar"+!/");
(2) Crear objeto jarURLConnection
JarURLConnection juc=(JarURLConnection)u.openConnection();
(3) Devuelve el nombre de la clase principal en el paquete jar
Atributos attr=juc.getMainAttributes();String name=attr.getValue("Mani-Class");
Asegúrese de que el atributo Mani-Class esté configurado correctamente en manifest.mf en su paquete jar. Nuevamente, debe prestar atención a las reglas.
(4) Cree un objeto de clase basado en el nombre de clase principal obtenido
Clase c=Class.forName(nombre);
(5) Llame a su método principal según el objeto Clase:
Método cm=c.getMethod("main",new Class[]{String.class}); cm.invoke(null,new Object[]{});
Consejo: lo anterior utiliza conocimientos sobre el mecanismo de reflexión Reflection. Si está interesado en múltiples mecanismos de reflexión, puede consultar el contenido relevante en el paquete java.lang.reflect.
8. Consejos sobre el uso de comandos JAR:
(1) jar crea un archivo ZIP comprimido
prueba jar cvfM TestZIP.jar
Simplemente agregue el parámetro M para no generar contenido relacionado con META-INF y luego cambie TestZIP.jar a TestZIP.zip. ¿No es muy simple?
(2) Utilice WinRAR para descomprimir el archivo .jar
Como dijimos anteriormente, el archivo JAR es un archivo comprimido especial, por lo que, por supuesto, se puede descomprimir usando algunas de nuestras herramientas de descompresión más utilizadas. En cuanto a cómo descomprimirlo, no necesito decírselo.
(3) Utilice WinRAR para generar archivos .jar
Ya hemos dicho que la principal diferencia entre los paquetes JAR y los paquetes ZIP es que hay un directorio META-INF adicional en el paquete JAR. Hay un archivo manifest.mf en el directorio META-INF. Solo necesitamos crear el correspondiente. directorio y comprimirlo.
La estructura del directorio es la siguiente:
Tarro de prueba
|--META-INF
|--manifest.mf
|--Archivos de clases relacionados