2009-08-06 41 views
145

he creado un archivo JAR como esto:Cómo ejecutar un archivo JAR

jar cf Predit.jar *.* 

me encontré con este archivo JAR haciendo doble clic sobre él (no funcionó). Así que corrí desde el indicador de DOS como esto:

java -jar Predit.jar 

Se planteado "No se pudo cargar la clase principal" excepciones. Así que extraje este archivo JAR:

jar -xf Predit.jar 

y me encontré con el archivo de clase:

java Predit 

funcionó bien. No sé por qué el archivo JAR no funcionó. Indique los pasos para ejecutar el archivo JAR

Respuesta

164

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

Oracle contiene una demostración completa, pero aquí hay otra desde cero. Se necesitan 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 

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.

A continuación, ejecute:

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 archivo jar, en ese caso qué modificaciones hay que hacer? – Anand

+0

@Anand, entonces debe incluir una línea de ruta de clase en su manifiesto y hacer referencia a los otros jar (s). http://docs.oracle.com/javase/tutorial/deployment/jar/downman.html – rob

+0

Ayúdenme en esta pregunta: http://stackoverflow.com/questions/24740803/could-not-find-or-load -main-class-on-jar-executing – Sajad

11

Hay que añadir un manifiesto a la jarra, que indica al tiempo de ejecución de Java lo que la clase principal es. Crear un archivo 'MANIFEST.MF' con el siguiente contenido:

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

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

+0

Por curiosidad, ¿el nombre de la subcarpeta 'Meta-inf' es sensible a las mayúsculas y minúsculas? Tradicionalmente lo he visto deletreado 'META-INF' –

+0

Tienes razón. La especificación dice "META-INF" y no dice nada sobre la insensibilidad de mayúsculas y minúsculas (http://java.sun.com/j2se/1.4.2/docs/guide/jar/jar.html#The%20META-INF%20directory) –

3

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

8

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 ejecuta el archivo jar.

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

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

45
java -classpath Predit.jar your.package.name.MainClass 
+0

Si este jar utiliza otros jar, ¿no debería el classpath ser como "/ path/to/jars/*"? –

+4

@Max Chetrusca Sí, pero el separador es ':' utilizar '*' no funcionará porque su shell lo expandirá así: '" /ruta/a/jars./a.jar ""/ruta/a/jarras/b .jar "' pero lo que realmente quieres es: '" /path/to/jars/a.jar:/path/to/jars/b.jar "'. – Lynch

-2

Para ejecutar frasco, primero que tienes que crear

jar ejecutable

continuación

java-jar xyz.jar

comando funcionará

3

Java

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

manifest.mf

Manifest-version: 1.0 
Main-Class: Hello 

En Línea de comandos:

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

Salida:

Hello Shahid 
+0

http://docs.oracle.com/javase/tutorial/deployment/jar/build.html –

2

Eclipse JAR Archivo Ejecutable

Crear un proyecto Java - RunnableJAR

  • Si se utiliza cualquiera jar files luego añadirlos a proyectar construir camino.
  • Seleccione la clase que tenga main() al crear el archivo Runnable Jar. enter image description here

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]); 
    } 
} 

Run Jar archivo usando el programa Java (cmd) mediante el suministro de argumentos y obtener la salida y visualización en la consola de 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 buscar Short cuts:

contenido de la Ayuda en Ayuda ► ► Java guía del usuario de desarrollo ► Referencias ► Menús y acciones

1

tengo esta estructura de carpetas:

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

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

Hay otros dos paquetes:

com.lynda.olivepress.press

com.lynda.olivepress.olive

1) Crear un archivo llamado "Manifest.txt" w 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 principal punto de entrada Clase

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/* medios, entre ellos los otros dos paquetes mencionados anteriormente, antes del punto 1)

4

antes de ejecutar la verificación frasco principal Clase: nombre de clase está disponible o no en MANIFIEST.MF archivo. MAINFEST.MF está presente en jar.

java -jar filename.jar 
2

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

Ejecutando el archivo jar. No hay necesidad de preocuparse demasiado por el archivo manifiesto. Hazlo simple y elgant.

Java de ejemplo Programa Mundial Hola

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

Compilar el archivo de clase

javac HelloWorld.java 

Creación del archivo JAR

jar cvfe HelloWorld.jar HelloWorld HelloWorld.class 

o

jar cvfe HelloWorld.jar HelloWorld *.class 

Ejecutar el archivo jar

java -jar HelloWorld.jar 

O

java -cp HelloWorld.jar HelloWorld 
Cuestiones relacionadas