Después de aprender el comando jar, tengo una comprensión más profunda del concepto de paquete jar

Cuando aprendí Java por primera vez, el concepto de paquete jar era muy vago. Buscando varias explicaciones, todos dijeron que es un formato de compresión, al igual que el formato de compresión de zip. Sucede que la herramienta de descompresión puede descomprimir el paquete jar.
También hay dudas de por qué jar es un formato comprimido, entonces, ¿por qué no usar zip directamente?
Así que debería ser diferente. Busqué muchos artículos sobre envases jar, pero las explicaciones no eran lo suficientemente claras y no provocaron mi profunda impresión.
Hasta que vi el comando jar por casualidad y busqué artículos sobre el comando jar, finalmente encontré un rayo de luz. El siguiente es un registro del uso del comando jar. De hecho, hay muchas herramientas IDE que básicamente no No necesita operación manual El comando jar también conduce a la falta de familiaridad con el paquete jar.

Explicación del concepto

  • El
    nombre completo del paquete jar jar es JavaTM Archive file, y el nombre completo de java archive file
    war es Web Archive file.
    También quiero decir algo sobre los archivos web archive . Esto es realmente para comprimir los archivos para una fácil administración, pero hay Hay algunas diferencias. Hay algunos archivos especiales en el jar y registros. Alguna información especial, como el archivo META-INF / MANIFEST.MF, registra alguna información especial y tiene un formato fijo. El comando java puede analizar el contenido y el significado de el archivo.
Manifest-Version: 1.0   //版本
Created-By: Apache Ant 1.5.1  //声明该文件的生成者,jar命令行工具生成的
Extension-Name: Struts Framework
Specification-Title: Struts Framework
Specification-Vendor: Apache Software Foundation
Specification-Version: 1.1
Implementation-Title: Struts Framework
Implementation-Vendor: Apache Software Foundation
Implementation-Vendor-Id: org.apache
Implementation-Version: 1.1
Class-Path:  commons-beanutils.jar commons-collections.jar commons-dig
 ester.jar commons-logging.jar commons-validator.jar jakarta-oro.jar s
 truts-legacy.jar //依赖jar
Build-Jdk: 1.8.0_226 //jdk编译版本
Main-Class: com.sidaier.vlook.Estimate //main入口类,可执行jar包

 

Reglas del archivo MF
1. No debe haber otros espacios ni líneas en blanco
2. El par clave-valor debe ser clave + dos puntos + espacio + valor
3. Debe haber dos líneas en blanco al final

  • Paquete paquete
    paquete es una especie de mecanismo de deduplicación en archivos java, y básicamente no tiene nada que ver con jar. Cuando estaba aprendiendo, era tonto y poco claro. El paquete es un espacio de nombres y distingue principalmente las clases de Java. El nombre completo de la clase de java contiene paquete., La primera línea del archivo java se utiliza para declarar el paquete. Si en diferentes paquetes jar, el paquete es el mismo y el nombre de la clase es el mismo, jvm considerará que es la misma clase.
package com.sidaier.test;//包名

public class TestPackage
{
    
    
	public static void main(String[] args){
    
    
		System.out.println("test......");
	}
}

comando jar

Análisis de comandos

Win abre la ventana cmd, ingrese el comando jar, aparecerá la siguiente explicación

Uso: jar {ctxui} [vfmn0PMe] [jar-file] [manifest-file] [entry-point] [-C dir] archivos…
opciones:
-c crear nuevo archivo
-t listar directorio de archivos
-x extraer del archivo El especificado (o todos) los archivos
-u actualizar el archivo existente (actualizar MANIFEST.MF, agregar contenido al archivo MF existente)
-v generar una salida detallada en la salida estándar
-f especificar el nombre de archivo del archivo
-m incluir el archivo de lista especificado Información de lista (debe ajustarse al formato del archivo MANIFEST.MF; de lo contrario, no se empaquetará, se regenerará) MANIFEST.MF
-n Después de crear un nuevo archivo, ejecute Pack200 Normalization
-e Especifique la aplicación para la aplicación independiente empaquetada en el archivo jar ejecutable Punto de entrada-
0 se almacena solamente; no use ninguna compresión ZIP
-P conserve el '/' inicial (ruta absoluta) y "..." (directorio principal) en el nombre del archivo. Componente
-M no crear un archivo de manifiesto de entrada (MANIFEST.MF)
- i Generar información de índice para el archivo jar especificado
-C Cambiar al directorio especificado e incluir los siguientes archivos

Si algún archivo es un directorio, se procesará de forma recursiva.
El orden especificado del nombre del archivo de manifiesto, el nombre del archivo de almacenamiento y el nombre del punto de entrada es el mismo que el orden especificado de las etiquetas 'm', 'f' y 'e'.

Ejemplo 1: Archive dos archivos de clase en un archivo llamado classes.jar:
jar cvf classes.jar Foo.class Bar.class
Ejemplo 2: Use el archivo de manifiesto existente 'mymanifest' y agregue los archivos en el directorio foo / Todos los archivos están archivados
in'classes.jar ': jar cvfm classes.jar mymanifest -C foo /.

comando javac

javac -d . TestPackage.java
//这个命令主要是生成包路径

Inserte la descripción de la imagen aquí

comando jar

jar -cvf test.jar TestPackage.class

Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/qq125281823/article/details/108246017
Recomendado
Clasificación