Java-Klassenpfad und Java-Ausgangsverzeichnis in Ubuntu richtig einrichten

8

Ich erhalte den Fehler

  

Ausnahme im Thread "main" java.lang.NoClassDefFoundError:

Wenn ich versuche, eine kompilierte Klasse unter Ubuntu auszuführen. Ich verwende ein sehr einfaches Helloworld-Beispiel, und die Millionen von Antworten, die bereits im Internet existieren, legen nahe, dass meine Variablen CLASSPATH und JAVA_HOME falsch gesetzt wurden.

Allerdings habe ich die etc / environment in den richtigen Ordnern und dem aktuellen Ordner bearbeitet:

  

PATH=".: / usr / local / sbin: / usr / lokal / bin: / usr / sbin: / usr / bin: / sbin: / bin: / usr / games"

     

JAVA_HOME="/ usr / lib / jvm / java-1.5.0-sun /"

     

CLASSPATH=".: / usr / lib / jvm / java-1.5.0-sun / lib"

und sie erscheinen, wenn ich den set-Befehl eintippe. In jedem Fall, selbst wenn ich den Klassenpfad manuell mit

einstelle
  

sudo java -cp. myfirstjavaprog.class

Ich bekomme den gleichen Fehler. Wo sollte ich sonst hinsehen? Dies muss ein Konfigurationsproblem sein.

Vielen Dank

    
Huguenot 29.12.2009, 17:01
quelle

8 Antworten

6

Sie möchten die Klasse vom Ende ablegen. Tippen Sie einfach ...

%Vor%     
Pace 29.12.2009, 17:02
quelle
5

Ich empfehle dringend, die CLASSPATH-Umgebungsvariable zu entfernen oder zumindest Ihre JRE / JDK daraus zu entfernen.

"." ist implizit im Klassenpfad, sofern nicht anders angegeben. Und seit Java 1.3 ist es schlau genug, auf der Basis des Ausführungspfades der ausführbaren javac / java-Dateien eigene Runtime und Bibliotheken zu finden. Seitdem war es redundant, wenn nicht sogar falsch, diejenigen auf dem Klassenpfad anzugeben. Natürlich ist .../lib falsch, da es nur jars gibt, keine Klassen, und diese werden nicht vom Klassenpfad übernommen, wenn sie nicht einzeln und explizit benannt sind.

Moderne Javas sind schlau genug, dass Sie einfach java <classname> eingeben können, wenn Sie im Stammverzeichnis des Klassenpfads stehen, und es wird Just Work ™.

    
Carl Smotricz 29.12.2009 17:26
quelle
1

Sie mischen Äpfel und Orangen. Ein roher Java- oder Javac-Aufruf in der Befehlszeile benötigt einen Klassenpfad, um zu wissen, wo er auf seine Klassen zugreifen kann. Wenn Sie

ausführen %Vor%

Sie geben Java eine Liste mit Orten, an denen nach ausführbaren Klassen gesucht werden kann. Es wird nirgendwo anders aussehen, einschließlich ".", Es sei denn, Sie sagen es zu. Also "CLASSPATH" hilft Ihnen nicht, wenn Sie

ausführen %Vor%

Mit anderen Worten, es ist nur eine Abkürzung, um den Classpath erneut eingeben zu müssen.

Viele Programme sind für die Verwendung von JAVA_HOME konfiguriert, aber letztendlich benötigen Java-Programme nur einen konfigurierten Klassenpfad und den Pfad zu Java (sie finden ihn über die Variable JAVA_HOME, also brauchen Sie ihn immer noch für Dinge wie ant, aber immer noch konzeptionell) nur eine Abkürzung auch).

Ihr PATH ist der Pfad, in dem das System nach Binärdateien sucht. Wenn Java nicht auf Ihrem Pfad ist (geben Sie "which java" ein, wird Ihnen angezeigt, welche, wenn überhaupt, Java auf Ihrem Pfad ist) läuft / full / path / to / java ist identisch mit dem Ausführen von "java" und dem System finde die Binärdatei in der PATH-Variablen.

    
Steve B. 29.12.2009 17:28
quelle
1

Nein, ich denke, dass CLASSPATH-Umgebungsvariablen ignoriert werden.

Der richtige Weg ist die Verwendung der Option -classpath beim Kompilieren und Ausführen. Stellen Sie es für jedes Projekt ein. Die Beweise, die du vor deinen Augen hast, sagen dir, dass es so ist.

Warum wird CLASSPATH ignoriert? Mehrere Gründe:

  1. Es ist ein Java 1.0-Artefakt, das in Ungnade gefallen ist.
  2. Die JVM hat keine Garantie, dass Sie eine als Umgebungsvariable festgelegt haben.
  3. IDEs haben ihre eigenen Anforderungen, daher verlassen sie sich nicht darauf.
  4. Java EE App-Server haben ihre eigenen Anforderungen, daher sind sie nicht darauf angewiesen.
  5. Man muss immer den ganzen Weg angeben, denn jedes Projekt ist wahrscheinlich anders. Sobald Sie an "Hello, World" vorbeigekommen sind, werden Sie feststellen, dass Sie Skripte erstellen oder Tools wie Ant und Maven verwenden, die Ihnen helfen, den CLASSPATH für Ihr Projekt festzulegen.
duffymo 29.12.2009 17:03
quelle
1

Verwenden Sie

%Vor%

Es setzt eine Menge Klassenpfad ein.

    
haasdas 14.05.2011 18:58
quelle
0

zum Setzen der Variable java_home, hier sind Anweisungen.

Ссылка

und

Klassenpfad kann ähnlich eingestellt werden

    
Anand 29.12.2009 17:09
quelle
0

Ich würde Ihnen wärmstens empfehlen, einige Zeit mit dem Sun-Tutorial zu verbringen. Es wird dir später helfen - Klassenpfade sind notorische Unruhestifter.

Ссылка

    
quelle
0

Ok, ich habe das Problem am falschen Ort gesucht. Es stellte sich heraus, dass Java in Ordnung war und ich das Opfer war, dass ich denselben Fehler für zwei separate Probleme bekam.

Ich habe ursprünglich versucht, ein Swing-Beispiel auszuführen, das ich von der Java-Website bekommen habe, aber ich hatte nicht bemerkt, dass es eine Paketdefinition hatte. Ich habe die richtige Ordnerstruktur eingerichtet und jetzt läuft es gut.

Als ich versucht habe, ein HelloWorld-Beispiel auszuführen, hatte ich versehentlich die .class-Erweiterung eingefügt.

Beide Probleme haben zu ClassNotFound-Fehlern geführt.

Vielen Dank für Ihre Hilfe.

    
Huguenot 29.12.2009 18:13
quelle