Un JAR ejecutable es un archivo ZIP con tus clases compiladas y un manifiesto que dice cuál es la clase principal. Es la forma estándar de repartir un programa de Java: quien lo recibe lo ejecuta con java -jar programa.jar. Se puede crear con las herramientas que trae el JDK, sin Maven ni un IDE.
También te puede interesar
El programa
package mx.ejemplo;
public class Saludo {
public static void main(String[] args) {
String nombre = args.length > 0 ? args[0] : "mundo";
System.out.println("¡Hola, " + nombre + "!");
System.out.println("Java " + Runtime.version().feature());
}
}Compilar, empaquetar y ejecutar
cd jar javac -d clases src/mx/ejemplo/Saludo.java jar --create --file saludo.jar --main-class mx.ejemplo.Saludo -C clases . java -jar saludo.jar Lupita jar --list --file saludo.jar
salida¡Hola, Lupita! Java 25 META-INF/ META-INF/MANIFEST.MF mx/ mx/ejemplo/ mx/ejemplo/Saludo.class
javac -d clasescompila y deja los.classen la carpetaclases, con una subcarpeta por paquete.jar --createempaqueta esa carpeta (-C clases .) y--main-classescribe en el manifiesto qué clase arranca.java -jarlee el manifiesto y ejecuta esa clase; lo que va después del nombre del JAR llega como argumentos.jar --listenseña lo que hay dentro: las clases y el manifiesto,META-INF/MANIFEST.MF.
Y si el programa usa bibliotecas
Un JAR normal no incluye las bibliotecas de las que depende: hay que pasarlas con --class-path o listarlas en el manifiesto con Class-Path. Para repartir un solo archivo con todo dentro (un «fat JAR») se usan Maven, con el plugin Shade, o Gradle, con Shadow. Y si quieres un instalador para Windows, macOS o Linux que no necesite tener Java instalado, el JDK trae jpackage.
Todo el código se compiló y se ejecutó con Java 25 LTS en un contenedor limpio antes de publicar esta página; las salidas están copiadas de esa ejecución.