Java "Hauptklasse konnte nicht gefunden oder geladen werden"?
Ich habe gestern angefangen java zu lernen, ich nutze die IntelliJ IDE von jetbrains.
Wenn ich in meinem Projekt mehr als eine Klasse habe bekomme ich beim ausführen folgenden fehler:
Fehler: Hauptklasse Test.jar konnte nicht gefunden oder geladen werden
Ursache: java.lang.ClassNotFoundException: Test.jar
Ich erstelle die .jar datei folgendermaßen:
Bei IntelliJ habe ich unter Projectstructur/artifacts einen neuen eintrag erstellt, als Main Class meine main Klasse angegeben und dann über Build/Build Artifacts/Build die jar datei erstellt. In dem Ordner mit dieser Datei befindet sich ausschließlich die Test.jar Datei (Was, nebenbei bemerkt nicht der Name meiner Klasse ist, sollte das irgentwelche auswirkungen haben ist es allerdings nicht der Grund für mein Problem da ich bereits ein zweites projekt erstellt habe, in welchem die Klasse und die jar Datei gleich hießen und es dennoch nicht funktioniert hat (Selbe Fehlermeldung)), welche ich dann mit 'java Test.jar' ausführe. Nun bekomme ich den oben gennanten error. Meine Hauptklasse sieht wie folgt aus:
import cons.colors;
public class greyscale_converter {
public static void main(String[] args){
System.out.println(args[0]);
}
}
Ich habe dann in dem Projekt noch das package 'cons' erstellt, in welchem sich die Klasse 'colors' befindet. Diese sieht wie folgt aus:
package cons;
public class colors {
}
Ich möchte nun also die jar datei erstellen können und von der main methode in der 'greyscale_converter' Klasse auf die klasse colors zugreifen können, bevor ich allerdings soweit kam erhielt ich schon die Fehlermeldung nach welcher die Hauptklasse nicht gefunden werden könne. Nach einer halben stunde googlen bin ich noch auf keine Lösung gestoßen die bei mir funktioniert hat. Danke schonmal.
1 Antwort
Wenn du tatsächlich versuchst, die JAR-Datei mit java Test.jar auszuführen, dann versuche es mal mit java -jar Test.jar.
Mit java Test.jar sagst du der JVM nämlich nichts anderes als: "Suche im aktuelle Class-Path die Klasse jar im Package Test und führe ihre main-Methode aus."
In deinem Fall könntest du auch java -cp Test.jar greyscale_converter verwenden, heißt für die JVM: "Erweitere den Default-Cass-Path um den Inhalt von Test.jar, dann suche im Class-Path die Klasse greyscale_converter und führe ihre main-Methode aus.".
"Lustig" wird das ganze dann, wenn man z.B. mehrere Klassen mit einer main-Methode in einem JAR hat. Mit java -jar Test.jar würde dann die main-Methode jener Klasse die im Manifest (sofern vorhanden) als "Main-Class" angegeben ist (z.B. grayscale_converter) ausgeführt werden, aber mit java -cp Test.jar foo.bar.KlasseXY die der Klasse KlasseXY im Package foo.bar.
Uhm. Das hat funktioniert. Danke...