PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : die liebe kommandozeile...



savage
29.09.2005, 23:21
kennt sich jemand hier mit compilieren von java-quelltext in der komandozeile aus?
ich bekomme da naemlich immer eine exception
...wenn ich die datei ausfuehren will... und das selbst bei einem einfachen programm
wie hallo welt:

der quelltext:
/* test

*/
public class Example {
public static void main(String args[]) {
System.out.println("Blablabla") ;
}
}

das resultat:

[playground]$ javac Example.java
[playground]$ java Example.class
Exception in thread "main" java.lang.NoClassDefFoundError: Example/class
[playground]$

mach ich da was falsch? hab ich was vergessen oder ist bei meinem compiler oder interpreter was futsch?

gruessle...

monarch
29.09.2005, 23:54
Moin,



das resultat:

[playground]$ javac Example.java
[playground]$ java Example.class


java Example muss es heißen, und schon müllt er dir das Ergebnis auf die Konsole.
Der Parameter für java ist der Name der Klasse, nicht die Datei. Es kann auch ne .jar, .zip, oder irgendwas übers Netz sein. Java hat ne Menge solche Quellen wo es seine Klassen sucht.

Was du mit
java Example.class machst ist im Prinzip folgendes (java legt Packages in Ordner ab und trennt die mit einem Punkt): du sagst "such das Package 'Example' und lade mir dort die Klasse 'class', also sucht er den Ordner Example und dort eine Datei namens class. Ergo mault er rum dass er 'Example/class' nicht findet 8)

DennisM
30.09.2005, 00:02
Mach das am besten per Eclipse, da kannst du den Code direkt aufsühren.

MFG

Dennis

savage
30.09.2005, 02:18
danke fuer die hilfe... aber leider hab ich jetzt erst mal den auftrag die ganze sache
in der konsole zu machen... :rtfm: ... lerneffekt und so...


@monarch:
leider geht es mit java Example auch nicht...

[playground]$ java Example
Exception in thread "main" java.lang.NoClassDefFoundError: Example
[playground]$

aber ich hab rausbekommen, we es geht...

[playground]$ java -classpath . Example
Blablabla
[playground]$

hat mir einer der hiesigen gurus zugefluestert :oldman ... und als hausaufgabe muss ich nun rausfinden, warum es funzt... :think:

gruessle

dmaphy
30.09.2005, 03:15
weil als klassenpfad immer der aktuelle pfad mit angeben sein muss. warum das so ist weiss ich auch nicht, aber ich weiss, dass du dir den parameter sparst, wenn du in deiner ~/.bashrc die umgebunsvariable CLASSPATH setzt ala:


CLASSPATH=.:/usr/java/jdk/src.zip:/usr/java/jdk/libs/;

savage
01.10.2005, 02:06
ja und jetzt soll ich die ganze sache mit jar und so weiter machen...
jar creieren ist nicht das problem, aber aus nem jar starten...
ich bekomm da immer ne bloede meldung...

[playground]$ java -jar EX.jar
Failed to load Main-Class manifest attribute from
EX.jar
[playground]$ java -jar EXM.jar
Exception in thread "main" java.io.IOException: invalid header field
at java.util.jar.Attributes.read(Attributes.java:387)
at java.util.jar.Manifest.read(Manifest.java:167)
at java.util.jar.Manifest.<init>(Manifest.java:52)
at java.util.jar.JarFile.getManifest(JarFile.java:158 )
[playground]$

wenn ich den classpath angebe mecker das teil genauso rum...
wobei EXM das jar mit einem manifest ist:

Main-Class:Example

...gespeichert in der datei namens exmain.mf
und das jar machen:

[playground]$ jar cvf EX.jar Example.class
[playground]$ jar cvmf exmain.mf EXM.jar Example.class

gibt es da irgendeine bloede kleinigkeit, die ich nicht beachtet oder uebersehen hab?
:hilfe2:

gruessle...

oenone
01.10.2005, 16:54
http://java.sun.com/docs/books/tutorial/jar/basics/

savage
03.10.2005, 19:36
habt ihr das schonmal so gesehen:

java -classpath EX.jar Example ????

so ganz ohne manifest-file und so?

der ansatz wurde mir gerade von einem der hiessigen programmierer
angeboten.. und es funzt...

gruessle...

monarch
04.10.2005, 19:46
Jau, das heißt dass du java "von außen" sagst: in der Datei EX.jar gibts die Klasse Example.

Mit Manifest usw. weiß das .jar sozusagen selbst wo es starten kann.

savage
05.10.2005, 01:46
und das beste ist, dass ich dahinter sogar eine logik erkennen kann...
ich bin verbluefft - ich glaube das hab ich gerafft... ( das macht mir fast schon angst.... 8o )

gruessle... (...aus dem sonnenstaat)