Uruchom klasę w pliku JAR

176

Jeśli masz plik jar o nazwie myJar.jarznajdujący się w / myfolder i chcesz użyć wywołanej myClassz niego klasy , jak możesz to zrobić z wiersza poleceń?

Myślałem, że wejdę do katalogu i powiesz, java -cp myJar.jar.myClassale to nie działa. Każda pomoc będzie mile widziana.

jim
źródło
java -cp myJar.jar myClassdla mnie działa dobrze - czy masz fałszywy okres w linii poleceń zamiast spacji?
Chris Dodd,
1
Co masz na myśli, mówiąc, że chcesz „użyć” tej klasy? Czy jest jakaś główna metoda, którą chcesz w szczególności wywołać?
Marsellus Wallace

Odpowiedzi:

256

Użyj java -cp myjar.jar com.mypackage.myClass.

  1. Jeśli klasa nie znajduje się w pakiecie, po prostu java -cp myjar.jar myClass.

  2. Jeśli nie znajdujesz się w katalogu, w którym się myJar.jarznajduje, możesz zrobić:

    1. Na platformach Unix lub Linux:

      java -cp /location_of_jar/myjar.jar com.mypackage.myClass

    2. W systemie Windows:

      java -cp c:\location_of_jar\myjar.jar com.mypackage.myClass

Mapa bitowa
źródło
10
Po prostu dodając do niego - w przypadku, gdy com.mypackage.myClass (w powyższym przykładzie) ma zależności od innych plików jar, uruchom go w następujący sposób: java -cp plik zależny1.jar; plik zależny2.jar; c: \ location_of_jar \ myjar.jar com. mypackage.myClass
akjain
2
Możliwa ścieżka błędu, na którą należy uważać w przypadku, gdy to nie zadziała: upewnij się, że w pełni kwalifikowana ścieżka do Twojej klasy odpowiada dokładnie temu, co znajduje się w pliku jar. Jeśli rozpakujesz -l /location-of-jar/myjar.jar i zobaczysz coś innego niż com / mypackage / myClass, to jest twój problem. (Na przykład, jeśli widzisz bin / com / mypackage / myClass, powinieneś cd'ed do kosza, aby zbudować plik jar, co masz nie zadziała.)
Scott C. Wilson
użyj MyClass, a nie myClass
Breno Inojosa
Próbując powyższego, otrzymuję błąd Wyjątek w wątku „main” java.lang.NoClassDefFoundError: cucumber / api / cli / Main pod adresem com.company.project.demo.bdd.runner.Execute.main (Execute.java:20 ) Przyczyna: java.lang.ClassNotFoundException: cucumber.api.cli.Main pod adresem java.net.URLClassLoader.findClass (nieznane źródło) pod adresem java.lang.ClassLoader.loadClass (nieznane źródło) w sun.misc.Launcher $ AppClassLoader. loadClass (Unknown Source) at java.lang.ClassLoader.loadClass (Unknown Source) ... 1 więcej
Vaibhav_Sharma
24

Chcesz:

java -cp myJar.jar myClass

Dokumentacja podaje następujący przykład:

C:> java -classpath C:\java\MyClasses\myclasses.jar utility.myapp.Cool
Richard Campbell
źródło
18

W Javie dostępne są dwa typy plików JAR:

  1. Runnable / Executable jar, który zawiera plik manifestu. Aby uruchomić słoik Runnable, możesz użyć java -jar fileName.jarlubjava -jar -classpath abc.jar fileName.jar

  2. Prosty plik jar, który nie zawiera pliku manifestu, więc wystarczy uruchomić główną klasę, podając jej ścieżkę java -cp ./fileName.jar MainClass

Gaurav Singh
źródło
6

Zakładając, że jesteś w katalogu, w którym myJar.jarznajduje się plik i który myClasszawiera public static void main()metodę:

Używasz następującego wiersza poleceń:

java -cp ./myJar.jar myClass

Gdzie:

  1. myJar.jarznajduje się w bieżącej ścieżce , zauważ, że .nie znajduje się w bieżącej ścieżce w większości systemów. W tym przypadku preferowana jest również w pełni kwalifikowana ścieżka .

  2. myClassjest w pełni kwalifikowaną ścieżką pakietu do klasy, przykład zakłada, że myClassznajduje się w pakiecie domyślnym, co jest złą praktyką, jeśli jest w pakiecie zagnieżdżonym, tak by było com.mycompany.mycode.myClass.


źródło
1

To jest właściwy sposób wykonania a .jar, i niezależnie od tego, jaka klasa .jarpowinna mieć, main()a następujące parametry to:

java -DLB="uk" -DType="CLIENT_IND" -jar com.fbi.rrm.rrm-batchy-1.5.jar
ubersucks
źródło