Cómo ejecutar un archivo JAR


207

Creé un archivo JAR como este:

jar cf Predit.jar *.*

Ejecuté este archivo JAR haciendo doble clic en él (no funcionó). Así que lo ejecuté desde el indicador de DOS de esta manera:

java -jar Predit.jar

Levantó excepciones de "Error al cargar la clase principal". Entonces extraje este archivo JAR:

jar -xf Predit.jar

y ejecuté el archivo de clase:

java Predit

Funcionó bien No sé por qué el archivo JAR no funcionó. Por favor, dime los pasos para ejecutar el archivo JAR

Respuestas:


207

Debe especificar una clase principal en el manifiesto del archivo jar.

Tutorial de Oracle contiene una demostración completa, pero aquí hay otra desde cero. Necesitas dos archivos:

Test.java:

public class Test
{
    public static void main(String[] args)
    {
        System.out.println("Hello world");
    }
}

manifest.mf:

Manifest-version: 1.0
Main-Class: Test

Tenga en cuenta que el archivo de texto debe terminar con una nueva línea o retorno de carro. La última línea no se analizará correctamente si no termina con una nueva línea o retorno de carro.

Entonces corre:

javac Test.java
jar cfm test.jar manifest.mf Test.class
java -jar test.jar

Salida:

Hello world

1
Si la clase de prueba se refiere a otra clase a través del archivo jar, en ese caso, ¿qué modificaciones se deben hacer?
Anand

@Anand entonces debes incluir una línea Class-Path en tu manifiesto y hacer referencia a los otros jar (s). docs.oracle.com/javase/tutorial/deployment/jar/downman.html
Rob

Por favor, ayúdenme en esta pregunta: stackoverflow.com/questions/24740803/…
Sajad

Creo que tener Manifest-version: 1.0 no es necesario porque el contenido del archivo de manifiesto dado se adjunta al archivo de manifiesto predeterminado que ya tiene la versión docs.oracle.com/javase/tutorial/deployment/jar/appman.html
Georgii Oleinikov

2
Esta es solo una muestra de extremo a extremo. Perfecto simple crujiente. Estuve buscando algo como esto por horas. No estoy seguro de por qué todo Internet está lleno de basura sin un ejemplo tan simple, cuando se busca Cómo crear un "java mundo" Hola. Muchas muchas gracias.
Atul

58
java -classpath Predit.jar your.package.name.MainClass

Si este frasco usa otros frascos, ¿no debería ser classpath como "/ path / to / jars / *"?
Maxim Chetrusca

55
@Max Chetrusca Si pero el separador está :utilizando *no funcionará debido a que su cáscara se expandirá así: "/path/to/jars/a.jar" "/path/to/jars/b.jar"pero lo que realmente quiere es: "/path/to/jars/a.jar:/path/to/jars/b.jar".
Lynch

29

Antes de ejecutar la verificación jar Main-Class: classnameestá disponible o no en el archivo MANIFEST.MF . MANIFEST.MF está presente en jar.

java -jar filename.jar

16

Debe agregar un manifiesto al jar, que le dice al tiempo de ejecución de Java cuál es la clase principal. Cree un archivo 'Manifest.mf' con el siguiente contenido:

Manifest-Version: 1.0
Main-Class: your.programs.MainClass

Cambie 'your.programs.MainClass' a su clase principal real. Ahora coloque el archivo en el archivo Jar, en una subcarpeta llamada 'META-INF'. Puede usar cualquier utilidad ZIP para eso.


1
Solo por curiosidad, ¿el nombre de la subcarpeta 'Meta-inf' distingue entre mayúsculas y minúsculas? Tradicionalmente lo he visto deletreado 'META-INF'
Adam Paynter

Tienes razón. La especificación dice "META-INF" y no dice nada sobre la insensibilidad a mayúsculas y minúsculas ( java.sun.com/j2se/1.4.2/docs/guide/jar/… )
Florian Fankhauser

12

Un enfoque muy simple para crear .class, archivo .jar.

Ejecutando el archivo jar. No hay que preocuparse demasiado por el archivo de manifiesto. Hazlo simple y elegante.

Programa Java Hello World de muestra

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello World");
    }
}

Compilar el archivo de clase

javac HelloWorld.java

Crear el archivo jar

jar cvfe HelloWorld.jar HelloWorld HelloWorld.class

o

jar cvfe HelloWorld.jar HelloWorld *.class

Ejecutando el archivo jar

 java -jar HelloWorld.jar

O

java -cp HelloWorld.jar HelloWorld

Sí, la jaropción 's le epermite especificar el Main-Class(punto de entrada ) y también crea un archivo de manifiesto correspondiente para usted. Consulte la documentación oficial de jar .
Petr Bodnár el

11

Si no desea crear un manifiesto solo para ejecutar el archivo jar, puede hacer referencia a la clase principal directamente desde la línea de comandos cuando ejecute el archivo jar.

java -jar Predit.jar -classpath your.package.name.Test

Esto establece qué clase principal ejecutar en el archivo jar.


2
-classpathviene justo después javay se deshace de él -jar(es decir, esta respuesta es incorrecta)
Pete

4

Java

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

manifest.mf

Manifest-version: 1.0
Main-Class: Hello

En la línea de comando:

$ jar cfm HelloMss.jar  manifest.mf Hello.class 
$ java -jar HelloMss.jar

Salida:

Hello Shahid

3

Si no desea tratar esos detalles, también puede usar los asistentes de jar de exportación de Eclipse o NetBeans.


3

Archivo JAR ejecutable de Eclipse

Crear un proyecto Java RunnableJAR

  • Si hay archivos jar se utilizan , agréguelos a la ruta de compilación del proyecto.
  • Seleccione la clase que tiene main () mientras crea el archivo Jar ejecutable. ingrese la descripción de la imagen aquí

Clase principal

public class RunnableMainClass {
    public static void main(String[] args) throws InterruptedException {
        System.out.println("Name : "+args[0]);
        System.out.println(" ID  : "+args[1]);
    }
}

Ejecute el archivo Jar utilizando el programa java ( cmd ) proporcionando argumentos y obtenga la salida y la pantalla en la consola eclipse.

public class RunJar { 
    static StringBuilder sb = new StringBuilder();
    public static void main(String[] args) throws IOException {
        String jarfile = "D:\\JarLocation\\myRunnable.jar";
        String name = "Yash";
        String id = "777";

        try { // jarname arguments has to be saperated by spaces
            Process process = Runtime.getRuntime().exec("cmd.exe start /C java -jar "+jarfile+" "+name+" "+id);
                    //.exec("cmd.exe /C start dir java -jar "+jarfile+" "+name+" "+id+" dir");
            BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream ()));
            String line = null;
            while ((line = br.readLine()) != null){
                sb.append(line).append("\n");
            }
            System.out.println("Console OUTPUT : \n"+sb.toString());
            process.destroy();
        }catch (Exception e){
            System.err.println(e.getMessage());
        }
   }
}

En Eclipse para encontrar atajos :

Ayuda ► Contenido de la ayuda ► Guía del usuario de desarrollo de Java ► Referencias ► Menús y acciones


3

Tengo esta estructura de carpetas:

D: \ JavaProjects \ OlivePressApp \ com \ lynda \ olivepress \ Main.class D: \ JavaProjects \ OlivePressApp \ com \ lynda \ olivepress \ press \ OlivePress.class D: \ JavaProjects \ OlivePressApp \ com \ lynda \ olivepress \ olives \ Kalamata .clase D: \ JavaProjects \ OlivePressApp \ com \ lynda \ olivepress \ olives \ Ligurian.class D: \ JavaProjects \ OlivePressApp \ com \ lynda \ olivepress \ olives \ Olive.class

Main.class está en el paquete com.lynda.olivepress

Hay otros dos paquetes:

com.lynda.olivepress.press

com.lynda.olivepress.olive

1) Cree un archivo "Manifest.txt"con dos líneas, primero con la clase principal y una segunda línea vacía.

Main-Class: com.lynda.olivepress.Main

D: \ JavaProjects \ OlivePressApp \ Manifest.txt

2) Crear JAR con manifiesto y punto de entrada de clase principal

D: \ JavaProjects \ OlivePressApp>jar cfm OlivePressApp.jar Manifest.txt com/lynda/olivepress/Main.class com/lynda/olivepress/*

3) Ejecutar JAR

java -jar OlivePressApp.jar

Nota: com/lynda/olivepress/*significa incluir los otros dos paquetes mencionados anteriormente, antes del punto 1)


-2

Para ejecutar jar, primero debes crear

jar ejecutable

luego

java -jar xyz.jar

comando funcionará

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.