Jak uruchomić pliki Java .class?

81

Skompilowałem program HelloWorld i używam wiersza polecenia, aby go uruchomić. Plik .class nosi nazwę HelloWorld2.class

Plik znajduje się w C: \ Users \ Matt \ workspace \ HelloWorld2 \ bin Oto, co otrzymuję, gdy przechodzę do wiersza poleceń i wpisuję „Java HelloWorld2”:

C:\Users\Matt>Java HelloWorld2
Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld2
Caused by: java.lang.ClassNotFoundException: HelloWorld2
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
Could not find the main class: HelloWorld2.  Program will exit.

Spodziewałem się wydrukowania HelloWorld. Co ja robię źle? Mam zainstalowany JDK.

Skizz
źródło
9
Oprócz odpowiedzi Izaaka na twój problem. Dobrym pomysłem może być pisanie "java" małymi literami, ponieważ wielkie litery działają tylko w MS Windows.
Hendrik Brummermann

Odpowiedzi:

95

Aby znaleźć skompilowaną klasę, musisz ustawić ścieżkę klasy:

java -cp C:\Users\Matt\workspace\HelloWorld2\bin HelloWorld2

Isaac Truett
źródło
Działa doskonale z dowolnego miejsca w mojej strukturze plików. Po prostu umieść ścieżkę do skompilowanej klasy w parametrze -cp, a następnie nazwę skompilowanej klasy bez żadnej ścieżki. Możesz także uruchomić tę klasę bez parametru -cp, jeśli znajdujesz się w tym samym folderze, co klasa skompilowana.
Václav
42

Aby uruchomić plik klasy Java z wiersza poleceń, składnia jest następująca:

java -classpath /path/to/jars <packageName>.<MainClassName>

gdzie nazwa_pakietu (zwykle zaczyna się od comlub org) jest nazwą folderu, w którym znajduje się plik klasy.

Na przykład, jeśli nazwa Twojej klasy głównej to Aplikacja, a nazwa pakietu Java Twojej aplikacji to com.foo.app, plik klasy musi znajdować się w com/foo/appfolderze (osobny folder dla każdej kropki), więc uruchamiasz aplikację jako:

$ java com.foo.app.App

Uwaga: $wskazuje na monit powłoki, zignoruj ​​go podczas pisania

Jeśli klasa nie ma żadnej packagenazwy zdefiniowane, po prostu uruchom jako: java App.

Jeśli masz jakieś inne zależności jar, upewnij się, że podałeś parametr classpath za pomocą -cp/ -classpathlub używając CLASSPATHzmiennej, która wskazuje na folder z plikami jar / war / ear / zip / class . W systemie Linux możesz poprzedzić polecenie:, CLASSPATH=/path/to/jarsw systemie Windows musisz dodać folder do zmiennej systemowej. Jeśli nie jest ustawiona, ścieżka klasy użytkownika składa się z bieżącego katalogu ( .).


Praktyczny przykład

Biorąc pod uwagę, że stworzyliśmy przykładowy projekt przy użyciu Mavena jako:

$ mvn archetype:generate -DgroupId=com.foo.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false 

i skompilowaliśmy nasz projekt mvn compilew naszym my-app/katalogu, wygeneruje on nasz plik klasy target/classes/com/foo/app/App.class.

Aby go uruchomić, możemy określić ścieżkę do klasy za pośrednictwem -cplub bezpośrednio do niej, sprawdź poniższe przykłady:

$ find . -name "*.class"
./target/classes/com/foo/app/App.class
$ CLASSPATH=target/classes/ java com.foo.app.App
Hello World!
$ java -cp target/classes com.foo.app.App
Hello World!
$ java -classpath .:/path/to/other-jars:target/classes com.foo.app.App
Hello World!
$ cd target/classes && java com.foo.app.App
Hello World!

Aby dokładnie sprawdzić swoją klasę i nazwę pakietu, możesz użyć narzędzia do dezasemblacji plików klas Java, np .:

$ javap target/classes/com/foo/app/App.class
Compiled from "App.java"
public class com.foo.app.App {
  public com.foo.app.App();
  public static void main(java.lang.String[]);
}

Uwaga: javapnie zadziała, jeśli skompilowany plik został zaciemniony.

kenorb
źródło
2

Może to oznaczać wiele rzeczy, ale najczęstszym jest to, że klasa zawarta w pliku nie ma takiej samej nazwy jak sam plik. Sprawdź więc, czy Twoja klasa nazywa się również HelloWorld2.

Federico Vera
źródło
0
  1. Przejdź do ścieżki, w której zapisałeś plik Java, który chcesz skompilować.
  2. Zastąp ścieżkę, wpisując cmd i naciśnij klawisz Enter.
  3. Pojawi się katalog wiersza polecenia zawierający plik ścieżki, taki jak C:/blah/blah/foldercontainJava
  4. Wchodzić javac javafile.java
  5. Naciśnij enter. Automatycznie wygeneruje plik klasy java
odunstory
źródło
-3

Musisz pisać java małymi literami i musisz dodać .class!

java HelloWorld2.class
Corni
źródło