Jak uruchomić plik JAR


207

Utworzyłem plik JAR taki jak ten:

jar cf Predit.jar *.*

Uruchomiłem ten plik JAR, klikając go dwukrotnie (nie działał). Uruchomiłem to z wiersza poleceń DOS w następujący sposób:

java -jar Predit.jar

Podniósł wyjątki „Nie udało się załadować klasy głównej”. Więc wyodrębniłem ten plik JAR:

jar -xf Predit.jar

i uruchomiłem plik klasy:

java Predit

Działa dobrze. Nie wiem, dlaczego plik JAR nie działał. Proszę, powiedz mi, jak uruchomić plik JAR

Odpowiedzi:


207

Musisz podać klasę główną w manifeście pliku jar.

Samouczek Oracle zawiera pełną demonstrację, ale oto kolejny od zera. Potrzebujesz dwóch plików:

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

Pamiętaj, że plik tekstowy musi kończyć się nową linią lub znakiem powrotu karetki. Ostatnia linia nie zostanie poprawnie przeanalizowana, jeśli nie zakończy się nową linią lub znakiem powrotu karetki.

Następnie uruchomić:

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

Wynik:

Hello world

1
jeśli klasa testowa odwołuje się do innej klasy za pomocą pliku jar, w takim przypadku jakie modyfikacje należy wykonać?
Anand

@A następnie musisz dołączyć linię manifestu do swojego manifestu i odwoływać się do innych jarów. docs.oracle.com/javase/tutorial/deployment/jar/downman.html
rob

Proszę,
pomóżcie

Myślę, że posiadanie wersji manifestu: 1.0 nie jest konieczne, ponieważ zawartość podanego pliku manifestu jest dołączana do domyślnego pliku manifestu, który ma już wersję docs.oracle.com/javase/tutorial/deployment/jar/appman.html
Georgii Oleinikov

2
To jest tylko kompletna próbka. Idealny prosty chips. Szukałem czegoś takiego przez wiele godzin. Nie jestem pewien, dlaczego cały Internet jest pełen śmieci, bez tak prostego przykładu, gdy szukano Jak utworzyć słoik java „Hello world”. Wielkie dzięki.
Atul

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

Jeśli ten słoik używa innych słoików, czy ścieżka klasy nie powinna być taka jak „/ path / to / jars / *”?
Maxim Chetrusca

5
@Max Chetrusca Tak ale separator :użyciu *nie będzie działać, ponieważ shell rozwinie to tak: "/path/to/jars/a.jar" "/path/to/jars/b.jar"ale co naprawdę chcesz to: "/path/to/jars/a.jar:/path/to/jars/b.jar".
Lynch,

29

Przed uruchomieniem sprawdzanie jar Main-Class: classnamejest dostępne lub nie w pliku MANIFEST.MF . MANIFEST.MF jest obecny w słoiku.

java -jar filename.jar

16

Musisz dodać manifest do słoika, który informuje środowisko wykonawcze Java, jaka jest główna klasa. Utwórz plik „Manifest.mf” o następującej treści:

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

Zmień „your.programs.MainClass” na rzeczywistą klasę główną. Teraz umieść plik w pliku Jar w podfolderze o nazwie „META-INF”. Możesz do tego użyć dowolnego narzędzia ZIP.


1
Ciekawe, czy w nazwie podfolderu „Meta-inf” rozróżniana jest wielkość liter? Tradycyjnie widziałem, że napisano „META-INF”
Adam Paynter,

Masz rację. Specyfikacja mówi „META-INF” i nie mówi nic o rozróżnianiu wielkości liter ( java.sun.com/j2se/1.4.2/docs/guide/jar/… )
Florian Fankhauser,

12

Bardzo proste podejście do tworzenia pliku .class, .jar.

Wykonywanie pliku jar. Nie musisz się zbytnio przejmować plikiem manifestu. Uczyń to prostym i eleganckim.

Przykładowy program Hello World programu Java

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

Kompilowanie pliku klasy

javac HelloWorld.java

Tworzenie pliku jar

jar cvfe HelloWorld.jar HelloWorld HelloWorld.class

lub

jar cvfe HelloWorld.jar HelloWorld *.class

Uruchamianie pliku jar

 java -jar HelloWorld.jar

Lub

java -cp HelloWorld.jar HelloWorld

Tak, jaropcja epozwala ci określić Main-Class( punkt wejścia ), a także tworzy dla ciebie odpowiedni plik manifestu. Zobacz oficjalną dokumentację słoika .
Petr Bodnár,

11

Jeśli nie chcesz tworzyć manifestu tylko w celu uruchomienia pliku jar, możesz odwoływać się do klasy głównej bezpośrednio z wiersza poleceń podczas uruchamiania pliku jar.

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

Ustawia to, która klasa główna ma działać w pliku jar.


2
-classpathprzychodzi zaraz javai się go pozbywa -jar(tj. ta odpowiedź jest niepoprawna)
Pete,

4

Jawa

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

manifest.mf

Manifest-version: 1.0
Main-Class: Hello

W wierszu poleceń:

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

Wynik:

Hello Shahid

3

Jeśli nie chcesz zajmować się tymi szczegółami, możesz także skorzystać z asystentów eksportu jar z Eclipse lub NetBeans.


3

Plik JAR środowiska Eclipse

Utwórz projekt Java - RunnableJAR

  • Jeśli używane są pliki jar, dodaj je do ścieżki kompilacji projektu.
  • Wybierz klasę posiadającą main () podczas tworzenia pliku Runnable Jar. wprowadź opis zdjęcia tutaj

Główna klasa

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

Uruchom plik Jar za pomocą programu Java ( cmd ), podając argumenty, a następnie uzyskaj dane wyjściowe i wyświetlanie w konsoli 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());
        }
   }
}

W Eclipse, aby znaleźć skróty :

Pomoc ► Treść pomocy ► Podręcznik użytkownika programowania Java ► Odnośniki ► Menu i działania


3

Mam tę strukturę folderów:

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 .class D: \ JavaProjects \ OlivePressApp \ com \ lynda \ olivepress \ olives \ Ligurian.class D: \ JavaProjects \ OlivePressApp \ com \ lynda \ olivepress \ olives \ Olive.class

Main.class jest w paczce com.lynda.olivepress

Istnieją dwa inne pakiety:

com.lynda.olivepress.press

com.lynda.olivepress.olive

1) Utwórz plik o nazwie "Manifest.txt"Dwie linie, Pierwsza z klasą główną i Druga pusta linia.

Main-Class: com.lynda.olivepress.Main

D: \ JavaProjects \ OlivePressApp \ Manifest.txt

2) Utwórz JAR z manifestem i punktem wejścia do klasy głównej

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

3) Uruchom JAR

java -jar OlivePressApp.jar

Uwaga: com/lynda/olivepress/*oznacza uwzględnienie dwóch pozostałych pakietów wymienionych powyżej, przed punktem 1)


-2

Aby uruchomić słoik, najpierw musisz utworzyć

słoik wykonywalny

następnie

java -jar xyz.jar

polecenie zadziała

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.