2009-08-06 23 views
145

ho creato un file JAR in questo modo:Come eseguire un file JAR

jar cf Predit.jar *.* 

ho eseguito questo file JAR con un doppio clic su di esso (non ha funzionato). Quindi l'ho eseguito dal prompt di DOS in questo modo:

java -jar Predit.jar 

Ha generato eccezioni "Impossibile caricare la classe principale". Così ho estratto questo file JAR:

jar -xf Predit.jar 

e ho eseguito il file di classe:

java Predit 

ha funzionato bene. Non so perché il file JAR non ha funzionato. Per favore dimmi i passaggi per eseguire il file JAR

risposta

164

È necessario specificare una Main-Class nel manifest del file jar.

Oracle tutorial contiene una dimostrazione completa, ma qui ce n'è un'altra da zero. Hai bisogno di due file:

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 

Si noti che il file di testo deve terminare con una nuova linea o di ritorno a capo. L'ultima riga non verrà analizzata correttamente se non termina con una riga nuova riga o ritorno a capo.

Quindi eseguire:

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

uscita:

Hello world 
+1

se la classe di test si riferisce un'altra classe tramite file jar, in tal caso quali modifiche da fare? – Anand

+0

@Anand quindi devi includere una linea di Class-Path nel tuo manifest e fare riferimento agli altri jar. http://docs.oracle.com/javase/tutorial/deployment/jar/downman.html – rob

+0

Please Help me su questa domanda: http://stackoverflow.com/questions/24740803/could-not-find-or-load -main-class-on-jar-executing – Sajad

11

È necessario aggiungere un manifesto il vaso, che racconta il runtime Java ciò che la classe principale è. Creare un file 'MANIFEST.MF' con il seguente contenuto:

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

Change 'your.programs.MainClass' alla classe reale principale. Ora inserisci il file nel file Jar, in una sottocartella denominata "META-INF". Puoi usare qualsiasi utilità ZIP per quello.

+0

Solo per curiosità, la sottocartella 'Meta-inf' è maiuscola/minuscola? Ho visto tradizionalmente scritto "META-INF" –

+0

Hai ragione. La specifica dice "META-INF" e non dice nulla di insensibilità al caso (http://java.sun.com/j2se/1.4.2/docs/guide/jar/jar.html#The%20META-INF%20directory) –

3

Se non si desidera gestire tali dettagli, è anche possibile utilizzare gli assistenti jar di esportazione da Eclipse o NetBeans.

8

Se non si desidera creare un manifest solo per eseguire il file jar, è possibile fare riferimento alla classe principale direttamente dalla riga di comando quando si esegue il file jar.

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

Imposta il cui principale di classe per l'esecuzione in file jar.

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

Se questo jar utilizza altri jar, il percorso di classe non dovrebbe essere come "/ percorso/a/jar/*"? –

+4

@Max Chetrusca Sì, ma il separatore è ':' l'uso di '*' non funzionerà perché la tua shell la espanderà in questo modo: '" /path/to/jars/a.jar ""/path/to/jars/b .jar "' ma quello che vuoi veramente è: '" /path/to/jars/a.jar:/path/to/jars/b.jar "'. – Lynch

-2

Per eseguire vaso, prima u deve creare

jar eseguibile

poi

java -jar xyz.jar

Comando funzionerà

3

Java

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

manifest.mf

Manifest-version: 1.0 
Main-Class: Hello 

On comando Linea:

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

uscita:

Hello Shahid 
+0

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

2

Eclipse Runnable JAR File

Creare un progetto Java - RunnableJAR

  • Se uno qualsiasi jar files sono utilizzati poi aggiungerli ad un progetto di configurazione percorso.
  • Selezionare la classe con main() durante la creazione del file Jar eseguibile. enter image description here

principale Classe

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 file usando il programma java (cmd) fornendo argomentazioni e ottenere l'output e visualizzazione nella console 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()); 
     } 
    } 
} 

In Eclipse per trovare Short cuts:

Aiuto ► Sommario ► guida di sviluppo Java ► Riferimenti ► Menu e azioni

1

ho questa struttura di cartelle:

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

Main.class è in pacchetto com.lynda.olivepress

Ci sono altre due pacchetti:

com.lynda.olivepress.press

com.lynda.olivepress.olive

1) Creare un file denominato "Manifest.txt" w con due linee, prima con la classe principale e una seconda linea vuota.

Main-Class: com.lynda.olivepress.Main 

D: \ JavaProjects \ OlivePressApp \ Manifest.txt

2) Creare JAR con manifesto e Main-Class Point Entry

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

3) Run JAR

java -jar OlivePressApp.jar

Nota: com/lynda/olivepress/* mezzo, compresi gli altri due pacchetti di cui sopra, prima del punto 1)

4

prima di eseguire il controllo barattolo Main-Class: nomeclasse è disponibile o non in MANIFEST.MF file. MAINFEST.MF è presente nel barattolo.

java -jar filename.jar 
2

Un approccio molto semplice per creare file .class, .jar.

Esecuzione del file jar. Non c'è bisogno di preoccuparsi troppo del file manifest. Rendilo semplice ed elgante.

campione Java Ciao Programma Mondiale

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

Compilazione del file di classe

javac HelloWorld.java 

Creazione del file jar

jar cvfe HelloWorld.jar HelloWorld HelloWorld.class 

o

jar cvfe HelloWorld.jar HelloWorld *.class 

esecuzione del file jar

java -jar HelloWorld.jar 

O

java -cp HelloWorld.jar HelloWorld