Cuando tengo un archivo jar de Java, ¿puedo ejecutar todo el jar directamente o hay algún caso en el que solo puedo ejecutar un archivo específico en el jar porque todo en sí no es ejecutable?

Un jar es, en su raíz, un contenedor para un conjunto de archivos y carpetas: de hecho, cualquier utilidad compatible con zip puede enumerar su contenido. Algunos de esos archivos serán recursos (íconos, archivos de propiedades …), pero la mayoría de ellos serán archivos ” .class ” respetando una jerarquía de paquetes.

Cualquiera de esas clases, si contiene un método “principal” estático, puede invocarse desde la línea de comando como un “punto de entrada” para el jar (utilizando la java -cp [myjar.jar] [mainclass.class] ). Esta clase es libre de cargar y usar otras clases y recursos de este jar según sea necesario.

Por razones de simplicidad, un archivo específico, el “MANIFEST”, puede contener una entrada ” Main-Class: classname ” que especifica la clase principal (es decir, el punto de entrada) de este jar. En este caso, el jar se puede “ejecutar” utilizando la sintaxis java -jar [myjar.jar] “.

Por lo tanto, un “jar ejecutable” no es más que un jar que especifica su clase principal a través del segundo mecanismo. Si no está presente, nada en Java estándar le impide ejecutar cualquier otra clase utilizando el primer mecanismo, ya que la especificación ” Main-Class ” es solo una pista útil.

Jar es básicamente una carpeta comprimida que contiene todos los archivos java compilados, es decir, archivos .class.

También puede poner los recursos que necesita su programa (archivos, imágenes, etc.)
en tu archivo jar.

En este archivo jar ejecutable, obtiene su clase principal desde donde se supone que su aplicación comienza a ejecutarse.

Por lo tanto, cuando hace doble clic en él, básicamente inicia jvm y ejecuta su código como se proporciona en main ()

Considere eclipse;
1) cada vez que crea un archivo jar, obtiene una opción en la que selecciona el archivo de clase que contiene el main ().
Este proceso coloca una entrada en el archivo de manifiesto (META-INF / Manifest.mf), lo que hace que el archivo jar sea un ejecutable y define el punto de entrada (main ()) desde donde se debe iniciar la aplicación.
El archivo de manifiesto se incluye en el jar.
Supongo que eclipse utiliza la hormiga apache para hacer esto (una mejor versión de Unix make pero para java).
pero también puede hacerlo utilizando el símbolo del sistema.

Si no proporciona / especifica un main (), el archivo jar actúa como cualquier otra carpeta comprimida y no es ejecutable.