Hallo liebe Helfer, vielleicht bin ich hier OT, aber ich habe gesehen, dass doch einige JAVA-Leute bei dieser Mailingliste dabei sind. Ich habe zwei Fragen: 1.) Wie schaffe ich es in den Pfad $PATH dauerhaft etwas einzutragen. Ich benutze Suse Linux 8.1. Für die momentane Sitzung schaffe ich das schon, doch ich will die Verweise auf die Verzeichnisse gerne dauerhaft drin haben. Ich habe schon rumgesucht, aber in /etc/bash.bashrc und in /etc/profile.local ist zwar der Pfad zur Java-Version eingetragen, aber nicht die anderen Pfade. 2.) Ich habe mir eine ZIP-Datei aus dem Internet geladen wo folgende Programme enthalten hat. DTDGenerator$1.class DTDGenerator$AttributeDetails.class DTDGenerator$ChildDetails.class DTDGenerator$ElementDetails.class DTDGenerator$StackEntry.class DTDGenerator.class DTDGenerator.java dtdgen.jar Und jetzt komme ich nicht mehr weiter um das Programm zu starten. Folgendes habe ich schon probiert und das sind die Ausgaben die ich bekomme: java -jar dtdgen.jar Failed to load Main-Class manifest attribute from dtdgen.jar java DTDGenerator.class Exception in thread "main" java.lang.NoClassDefFoundError: DTDGenerator/class java -class DTDGenerator.class Unrecognized option: -class Could not create the Java virtual machine. Ich habe JDK 1.4 am laufen. So sieht mein $PATH aus. echo $PATH /usr/local/bin:/usr/bin:/usr/X11R6/bin:/bin:/usr/games:/opt/gnome2/bin:/opt/gnome/bin:/opt/kde3/bin:/opt/kde2/bin:/usr/lib/java/bin:/opt/gnome/bin: .:/home/maria/xml/akademie/:/usr/lib/saxon Wobei die zweite Zeile momentan immer noch jedesmal wieder exportiert werden muss, dass dies mit dabei ist. Darum ging es unte 1). Es wäre toll, wenn mir jemand schreiben könnte, was ich machen muss. Leider habe ich nicht viel Erfahrung mit Java. Vielen Dank für Eure Bemühungen. Viele Grüße Marita Betz
Marita Betz schrieb:
[...] 1.) Wie schaffe ich es in den Pfad $PATH dauerhaft etwas einzutragen. Ich benutze Suse Linux 8.1. Für die momentane Sitzung schaffe ich das schon, doch ich will die Verweise auf die Verzeichnisse gerne dauerhaft drin haben.
Ich habe schon rumgesucht, aber in /etc/bash.bashrc und in /etc/profile.local ist zwar der Pfad zur Java-Version eingetragen, aber nicht die anderen Pfade.
Das Problem hat wenig mit Java zu tun, daher kann ich da mal etwas dazu sagen... Wenn Du den Pfad fuer _alle_ User des System erweitern moechtest, so kannst Du das in /etc/profile.local machen. Eine Zeile der Art export PATH=$PATH:/das/soll/hinzugefuegt/werden wuerde das Verzeichnis "/das/soll/hinzugefuegt/werden" zum Pfad hinzufuegen, und zwar am Ende. Manchmal will man aber, dass ein eigenes Verzeichnis zu allererst im Pfad steht (nach Programmen wird der Reihenfolge nach gesucht im Pfad, beim ersten passenden Programm wird die Suche normalerweise abgebrochen), dann muss man die Zeile oben umdrehen: export PATH=/das/soll/hinzugefuegt/werden:$PATH Wenn es rein Bash-spezifisch ist, dann kannst Du es in die Datei /etc/bash.bashrc.local schreiben. Soll der Pfad nur fuer Dich, also einen einzelnen User, erweitert werden, so macht das der User selbst in seinem HOME-Verzeichnis. Eine Login-Shell liest die Datei .profile ein. Alle anderen inter- aktiven Shells lesen .bashrc ein, sofern das die Default-Shell ist. Du solltest also die Pfad-Erweiterung in eine der Dateien schreiben, das muesste dann funktionieren. Die Zeile, die einzutragen ist, ist identisch mit den Zeilen oben, je nachdem, ob Du eben das zusaetz- liche Verzeichnis zu Beginn oder zum Ende des Pfades einfuegen moechtest. Fuer andere Shells heisst die spezifische Konfigurations- datei entsprechend, siehe die Man-Page der jeweilgen Shell. Es gibt auch noch ~/.bash_profile und weitere Konfigurationsdateien, siehe dazu "man bash", Sektion FILES - welche man benutzen sollte, haengt eben davon ab, was genau man erreichen moechte und fuer welche Art von Shell es gelten soll. Gruesse, Th.
Am So, den 26.10.2003 schrieb Marita Betz um 10:26:
2.) Ich habe mir eine ZIP-Datei aus dem Internet geladen wo folgende Programme enthalten hat.
DTDGenerator$1.class DTDGenerator$AttributeDetails.class DTDGenerator$ChildDetails.class DTDGenerator$ElementDetails.class DTDGenerator$StackEntry.class DTDGenerator.class DTDGenerator.java dtdgen.jar
Und jetzt komme ich nicht mehr weiter um das Programm zu starten.
java DTDGenerator MfG, Dennis -- PMs bitte an dennis@...! Alles, was an lists@stosberg.net geht und nicht über die Liste kommt, veschwindet ungesehen im Müll.
Hallo Dennis, vielen Dank für Dein Posting. Am Sonntag, 26. Oktober 2003 16:41 schrieb Dennis Stosberg:
Am So, den 26.10.2003 schrieb Marita Betz um 10:26:
2.) Ich habe mir eine ZIP-Datei aus dem Internet geladen wo folgende Programme enthalten hat.
DTDGenerator$1.class DTDGenerator$AttributeDetails.class DTDGenerator$ChildDetails.class DTDGenerator$ElementDetails.class DTDGenerator$StackEntry.class DTDGenerator.class DTDGenerator.java dtdgen.jar
Und jetzt komme ich nicht mehr weiter um das Programm zu starten.
java DTDGenerator
Das funktioniert leider nicht, es kommt folgende Fehlermeldung: java DTDGenerator Exception in thread "main" java.lang.NoClassDefFoundError: DTDGenerator Was nun? Noch ein Nachtrag zum neuen Posting von Thomas, Es stimmt ich habe eine ./profile Kann das sein das diese in Konqueror nicht angezeigt wird auch wenn ich die versteckten Dateien mit anzeigen lasse? Oder habe ich sie dort übersehen. Ich habe jetzt die Export-Befehle für die Verzeichnisse wo ich noch brauche, dort reingeschrieben. Ich werde das System zuerst neu starten müssen, damit diese Befehle dann ausgeführt werden, oder? Viele Grüße Marita Betz
Marita Betz schrieb:
Am Sonntag, 26. Oktober 2003 16:41 schrieb Dennis Stosberg:
Am So, den 26.10.2003 schrieb Marita Betz um 10:26:
2.) Ich habe mir eine ZIP-Datei aus dem Internet geladen wo folgende Programme enthalten hat.
DTDGenerator$1.class DTDGenerator$AttributeDetails.class DTDGenerator$ChildDetails.class DTDGenerator$ElementDetails.class DTDGenerator$StackEntry.class DTDGenerator.class DTDGenerator.java dtdgen.jar
Und jetzt komme ich nicht mehr weiter um das Programm zu starten.
java DTDGenerator
Das funktioniert leider nicht, es kommt folgende Fehlermeldung:
java DTDGenerator Exception in thread "main" java.lang.NoClassDefFoundError: DTDGenerator
Was nun?
Ich kenne mich mit Java nicht so aus, aber muss das nicht $> java -jar dtdgen.jar heissen zum Aufruf? So rufe ich jedenfalls meinen WebPhotoPublisher auf, und das funktioniert praechtig :-) Ist jetzt aber nur so eine Vermutung...
Noch ein Nachtrag zum neuen Posting von Thomas,
Es stimmt ich habe eine ./profile Kann das sein das diese in Konqueror nicht angezeigt wird auch wenn ich die versteckten Dateien mit anzeigen lasse? Oder habe ich sie dort übersehen.
Es ist nicht ./profile, sonder ~/.profile, d.h. der Punkt ist Teil des Namens. Ich nutze Konqueror nicht, kann dazu also wenig sagen. Wenn er aber versteckte Dateien anzeigt, dann sollte da auch .profile dabei sein.
Ich habe jetzt die Export-Befehle für die Verzeichnisse wo ich noch brauche, dort reingeschrieben. Ich werde das System zuerst neu starten müssen, damit diese Befehle dann ausgeführt werden, oder?
Na, unter Linux braucht man selten die Brechstange :-) Neu einloggen reicht auch... CU, Th.
On Sun, 26 Oct 2003 at 19:26 (+0100), Thomas Hertweck wrote:
Marita Betz schrieb:
Am Sonntag, 26. Oktober 2003 16:41 schrieb Dennis Stosberg:
Am So, den 26.10.2003 schrieb Marita Betz um 10:26:
2.) Ich habe mir eine ZIP-Datei aus dem Internet geladen wo folgende Programme enthalten hat.
DTDGenerator$1.class DTDGenerator$AttributeDetails.class DTDGenerator$ChildDetails.class DTDGenerator$ElementDetails.class DTDGenerator$StackEntry.class DTDGenerator.class DTDGenerator.java dtdgen.jar
Und jetzt komme ich nicht mehr weiter um das Programm zu starten.
java DTDGenerator
Das funktioniert leider nicht, es kommt folgende Fehlermeldung:
java DTDGenerator Exception in thread "main" java.lang.NoClassDefFoundError: DTDGenerator
Was nun?
Ich kenne mich mit Java nicht so aus, aber muss das nicht $> java -jar dtdgen.jar heissen zum Aufruf? So rufe ich jedenfalls meinen WebPhotoPublisher auf, und das funktioniert praechtig :-) Ist jetzt aber nur so eine Vermutung...
Das geht nur wenn die jar-Datei speziell 'behandelt' wurde. Der Ersteller muss dabei eine sog. Manifest-Datei anlegen in die der Name der Main-Klasse (also der Klasse mit main()-Methode) angegeben werden muss. Im Gegensatz zu C/C++ wo es praktisch nur eine main()-Funktion geben kann, kann in Java jede Klasse eine main()-Methode haben, erst beim Programmstart gibt man die Klasse mit der main()-Methode an, die ausgeführt werden soll. Die vorliegende Datei wurde anscheiend nicht 'behandelt' sondern die main-Klasse extra beigelegt. Gruß, Bernhard -- _________ http://www.bwalle.de _________________________________________________ "Only free men can negotiate..." -- Nelson Mandela
Bernhard Walle schrieb:
[...] sondern die main-Klasse extra beigelegt.
Fall das der Fall und die Klasse DTDGenerator _nicht_ im jar enthalten ist,
wäre es nötig sowohl den Pfad zu dtdgen.jar als auch . (oder alternativ zu .
das Verzeichnis, in dem sich DTDGenerator.class befindet) in den CLASSPATH
mit aufzunehmen.
Also:
CLASSPATH=.:/pfad/von/dtdgen.jar:
Hallo Marita, On Sun, 26 Oct 2003 at 10:26 (+0100), Marita Betz wrote:
2.) Ich habe mir eine ZIP-Datei aus dem Internet geladen wo folgende Programme enthalten hat.
DTDGenerator$1.class DTDGenerator$AttributeDetails.class DTDGenerator$ChildDetails.class DTDGenerator$ElementDetails.class DTDGenerator$StackEntry.class DTDGenerator.class DTDGenerator.java dtdgen.jar
Und jetzt komme ich nicht mehr weiter um das Programm zu starten.
java -cp dtdgen.jar DTDGenerator Gruß, Bernhard -- _________ http://www.bwalle.de _________________________________________________ Konfuzius sprach: "Listige Worte koennen die Tugend ruinieren. Kleine Ungeduldigkeiten koennen grosse Plaene ruinieren."
Am Sonntag, 26. Oktober 2003 19:27 schrieb Bernhard Walle:
Hallo Marita,
On Sun, 26 Oct 2003 at 10:26 (+0100), Marita Betz wrote:
2.) Ich habe mir eine ZIP-Datei aus dem Internet geladen wo folgende Programme enthalten hat.
DTDGenerator$1.class DTDGenerator$AttributeDetails.class DTDGenerator$ChildDetails.class DTDGenerator$ElementDetails.class DTDGenerator$StackEntry.class DTDGenerator.class DTDGenerator.java dtdgen.jar
Und jetzt komme ich nicht mehr weiter um das Programm zu starten.
java -cp dtdgen.jar DTDGenerator
Hallo Bernhard, vielen Dank für Dein Posting. Das funktioniert. Aber erst als ich das Verzeichnis in den CLASSPATH eingetragen hatte. Es kommt folgende Meldung: java DTDGenerator Usage: java DTDSAXGen input-file >output-file Ich bin mir noch nicht ganz klar darüber was ich da jetzt angeben soll. Hast Du dazu eine Idee? Vielen Dank für Deine Mühe. Viele Grüße Marita Betz P.S. Ich werde auch mal unseren Kursleiter dazu befragen, das ist überhaupt die Idee. Aber der kennt sich mit Java und Linux auch nicht so aus.
Hallo Marita, On Sun, 26 Oct 2003 at 21:23 (+0100), Marita Betz wrote:
Am Sonntag, 26. Oktober 2003 19:27 schrieb Bernhard Walle:
On Sun, 26 Oct 2003 at 10:26 (+0100), Marita Betz wrote:
2.) Ich habe mir eine ZIP-Datei aus dem Internet geladen wo folgende Programme enthalten hat.
DTDGenerator$1.class DTDGenerator$AttributeDetails.class DTDGenerator$ChildDetails.class DTDGenerator$ElementDetails.class DTDGenerator$StackEntry.class DTDGenerator.class DTDGenerator.java dtdgen.jar
Und jetzt komme ich nicht mehr weiter um das Programm zu starten.
java -cp dtdgen.jar DTDGenerator
vielen Dank für Dein Posting.
Das funktioniert. Aber erst als ich das Verzeichnis in den CLASSPATH eingetragen hatte.
Bei mir ist . schon stanardmäßig im $CLASSPATH, deshalb habe ich das nicht explizit erwähnt; sorry. Ich habe mal aus der neuesten Version von http://prdownloads.sourceforge.net/ ein einfach zu handhabendes JAR gebaut: http://www.bwalle.de/temp/DTDGenerator.jar . Das kann dann einfach mit java -jar DTDGenerator.jar aufgerufen werden ohne irgendwelche CLASSPATH-Variablen neu zu setzen. Mit CLASSPATH sollten sich eigentlich nur Entwickler von Java-Programmen auskennen müssen, nicht aber Anwender.
Es kommt folgende Meldung:
java DTDGenerator Usage: java DTDSAXGen input-file >output-file
Ich bin mir noch nicht ganz klar darüber was ich da jetzt angeben soll.
Einfach eine Eingabedatei (eine XML-Datei). Es wird dann auf stdout eine DTD ausgegeben. Und diese Ausgabe kann dann mit > ausgabedatei in den meisten Shells unter Unix oder auch Windows in eine Datei umgelenkt werden. Beispiel: ,----[ test.xml ]- | <html> | <head>Title</head> | <body>Test</body> | </html> `---- Dann mit der JAR-Datei: java -jar DTDGenerator.jar test.xml ergibt: <!ELEMENT body ( #PCDATA ) > <!ELEMENT head ( #PCDATA ) > <!ELEMENT html ( head, body ) > ich kenne mich jetzt mit DTDs im Detail nicht aus, schaut aber jedenfalls richtig aus.
P.S. Ich werde auch mal unseren Kursleiter dazu befragen, das ist überhaupt die Idee. Aber der kennt sich mit Java und Linux auch nicht so aus.
Bei Java unter Windows hast Du exakt die gleichen Probleme. Einziger Unterschied ist, dass beim Classpath Verzeichnisse nicht mit ":" sondern mit ";" abgetrennt werden. Gruß, Bernhard -- _________ http://www.bwalle.de _________________________________________________ Zivilcourage ist das, was von einem Menschen übrig bleibt, wenn der Vorgesetzte das Zimmer betritt. -- Wernher von Braun
[..] 2.) Ich habe mir eine ZIP-Datei aus dem Internet geladen wo folgende Programme enthalten hat.
DTDGenerator$1.class DTDGenerator$AttributeDetails.class DTDGenerator$ChildDetails.class DTDGenerator$ElementDetails.class DTDGenerator$StackEntry.class DTDGenerator.class DTDGenerator.java dtdgen.jar
Und jetzt komme ich nicht mehr weiter um das Programm zu starten.
Folgendes habe ich schon probiert und das sind die Ausgaben die ich bekomme:
java -jar dtdgen.jar Failed to load Main-Class manifest attribute from dtdgen.jar
Sieht so aus, als wäre das jar nicht dafür gedatch, auf diese Art ausgeführt zu werden.
java DTDGenerator.class Exception in thread "main" java.lang.NoClassDefFoundError: DTDGenerator/class
java -class DTDGenerator.class Unrecognized option: -class Could not create the Java virtual machine.
Ich habe JDK 1.4 am laufen. So sieht mein $PATH aus. echo $PATH /usr/local/bin:/usr/bin:/usr/X11R6/bin:/bin:/usr/games:/opt/gnome2 /bin:/opt/gnome/bin:/opt/kde3/bin:/opt/kde2/bin:/usr/lib/java/bin: /opt/gnome/bin: .:/home/maria/xml/akademie/:/usr/lib/saxon
Wobei die zweite Zeile momentan immer noch jedesmal wieder exportiert werden muss, dass dies mit dabei ist. Darum ging es unte 1).
Es wäre toll, wenn mir jemand schreiben könnte, was ich machen muss. Leider habe ich nicht viel Erfahrung mit Java.
Schau mal, was 'echo $CLASSPATH' ausgibt. Wenn in $CLASSPATH das aktuelle Verzeichnis . mit enthalten ist, sollte es ausreichen, ins Verzeichnis mit den .class-Dateien zu wechseln und dort 'java DTDGenerator' aufzurufen (ohne das .class). Falls . nicht im CLASSPATH enthalten ist, ist es vermutlich am einfachsten, den Pfad zu dem dtdgen.jar in $CLASSPATH mit aufzunehmen. Dann sollte 'java DTDGenerator' funktionieren. Voraussetzung ist, daß die JRE korrekt installiert ist. -- Gruß, Alex
Halllo liebe Helfer, Am Sonntag, 26. Oktober 2003 19:48 schrieb Alexander Veit:
[..] 2.) Ich habe mir eine ZIP-Datei aus dem Internet geladen wo folgende Programme enthalten hat.
DTDGenerator$1.class DTDGenerator$AttributeDetails.class DTDGenerator$ChildDetails.class DTDGenerator$ElementDetails.class DTDGenerator$StackEntry.class DTDGenerator.class DTDGenerator.java dtdgen.jar
Und jetzt komme ich nicht mehr weiter um das Programm zu starten.
Folgendes habe ich schon probiert und das sind die Ausgaben die ich bekomme:
java -jar dtdgen.jar Failed to load Main-Class manifest attribute from dtdgen.jar
Sieht so aus, als wäre das jar nicht dafür gedatch, auf diese Art ausgeführt zu werden.
java DTDGenerator.class Exception in thread "main" java.lang.NoClassDefFoundError: DTDGenerator/class
java -class DTDGenerator.class Unrecognized option: -class Could not create the Java virtual machine.
Ich habe JDK 1.4 am laufen. So sieht mein $PATH aus. echo $PATH /usr/local/bin:/usr/bin:/usr/X11R6/bin:/bin:/usr/games:/opt/gnome2 /bin:/opt/gnome/bin:/opt/kde3/bin:/opt/kde2/bin:/usr/lib/java/bin: /opt/gnome/bin: .:/home/maria/xml/akademie/:/usr/lib/saxon
Wobei die zweite Zeile momentan immer noch jedesmal wieder exportiert werden muss, dass dies mit dabei ist. Darum ging es unte 1).
Es wäre toll, wenn mir jemand schreiben könnte, was ich machen muss. Leider habe ich nicht viel Erfahrung mit Java.
Schau mal, was 'echo $CLASSPATH' ausgibt.
Da kam nichts.
Wenn in $CLASSPATH das aktuelle Verzeichnis . mit enthalten ist, sollte es ausreichen, ins Verzeichnis mit den .class-Dateien zu wechseln und dort 'java DTDGenerator' aufzurufen (ohne das .class).
Falls . nicht im CLASSPATH enthalten ist, ist es vermutlich am einfachsten, den Pfad zu dem dtdgen.jar in $CLASSPATH mit aufzunehmen. Dann sollte 'java DTDGenerator' funktionieren.
Ich habe jetzt mal CLASSPATH=/home/maria/xml/akademie/ gemacht. Dazu eine Frage, wahrscheinlich ist das hier genauso wieder wie bei PATH. Wenn ich das nicht in die ./profile reinschreibe, muss ich das doch bestimmt jedesmal wieder angeben oder? Wie bekomme ich das hin, dass mehrere Verzeichnisse zum Beispiel im CLASSPATH stehen, oder ist das nicht gut? Mache ich jetzt java DTDGenerator kommt jetzt die Ausgabe: maria@linux:~/xml/akademie> java DTDGenerator Usage: java DTDSAXGen input-file >output-file Das ist ja schon ein Fortschritt, aber so ganz weiss ich jetzt immer noch nicht was ich damit anfangen soll. Hat jemand von Euch eine Idee dazu. Ich dachte das Programm kann DTD generieren und diese dann mit der XML-Datei validieren. Input-File könnte ja die XML-Datei sein aber output-file (evtl. eine html-Datei oder eine andere Dateiart). Was ist eigentlich der Unterschied zwischen PATH und CLASSPATH das ist mir noch nicht ganz klar. Den Punkt 1 meiner Mail ist inzwischen gelöst. Ich habe das mit den export Befehlen mit den jeweiligen Verzeichnissen in die ./profile Datei eingetragen und jetzt sind sie mit drin. Ohne dass ich sie jedesmal seperat wieder eingeben muss. Eine Frage habe ich jetzt aber doch dazu noch. Die ./profile Datei ist im Unterverzeichnis /home/maria. Funktioniert das dann wenn ich da z. B. reingeschrieben haben export PATH=$PATH:/usr/lib/saxon oder hätte ich da schreiben müssen anstatt /usr/lib/saxon ../../usr/lib/saxon Was ist jetzt richtig? Da bin ich doch etwas im Zweifel. Vielen Dank für Eure Mühe. Viele Grüße Marita Betz P.S. JRE muss richtig installiert sein, sonst würden ja andere Java-Programme wie Treebeard nicht laufen. Diese habe ich ja auch zum Starten gebracht.
Marita Betz schrieb:
[...] Wenn ich das nicht in die ./profile reinschreibe, muss ich das doch bestimmt jedesmal wieder angeben oder?
So ist es.
Wie bekomme ich das hin, dass mehrere Verzeichnisse zum Beispiel im CLASSPATH stehen, oder ist das nicht gut?
Das ist häufig sogar notwendig.
[...] Was ist eigentlich der Unterschied zwischen PATH und CLASSPATH das ist mir noch nicht ganz klar.
PATH gibt an, wo von einer Shell nach ausführbaren Dateien gesucht werden soll. Analog dazu gibt CLASSPATH an, wo Java-Packages liegen, die von einer Java VM ausführbare Klassen enthalten: - Jede Java-Klasse gehört in ein Java-Package. - Ein Package ist ein Verzeichnis relativ zum CLASSPATH. - Der CLASSPATH kann Verzeichnisse oder Archive wie JARs oder ZIPs enthalten. Beispiel: CLASSPATH=.:/home/me/packages:/home/me/jars/xml-apis.jar 1) wenn /home/me/packages/DTDGenerator.class existiert, dann ist DTDGenerator eine Klasse aus dem Root-Package 2) wenn /home/me/packages/de/myorg/MyMain.class existiert, dann ist MyMain eine Klasse aus dem Package de.myorg 3) Falls das Archiv xml-apis.jar die Datei /org/w3c/dom/Document.class enthält, ist Document eine Klasse aus dem Package org.w3c.dom -- Viele Grüße, Alex
participants (5)
-
Alexander Veit
-
Bernhard Walle
-
Dennis Stosberg
-
Marita Betz
-
Thomas Hertweck