PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem mit classpath



pertze
20-02-2007, 11:15
Hallo,

ich habe ein kleines SWT-Programm unter Eclipse geschrieben. Das funktioniert da auch soweit ganz gut. Nun möchte ich das Programm einmal außerhalb von Eclipse ausführen und bin dazu wie folgt vorgegangen:

Die Verzeichnisstruktur:
L:\Java\rtool\lib (1)
L:\Java\rtool\src (2)

Unter (1) liegen die benötigten .jar Dateien für SWT, iText, JDBC und die SWT .dlls. Unter (2) sind alle .java Dateien zu finden. Die Hauptklasse mit der main-Methode ist L:\Java\rtool\src\Gui.java.

Das Kompilieren funktioniert:

L:\Java\rtool>javac -classpath lib\itext.jar;lib\swt.jar;lib\mysql-connector-java.jar;.;src src\*.java
Das Ausführen aber nicht:


L:\Java\rtool>java -classpath lib\itext.jar;lib\swt.jar;lib\mysql-connector-java.jar;.;src -Djava.library.path=lib src\Gui
Exception in thread "main" java.lang.NoClassDefFoundError: src\Gui (wrong name: Gui)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknow n Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$100(Unknown Source)
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)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)

Habe auch schon versucht über Eclipse ein JAR-File zu bauen, jedoch findet er dort die Main-Methode nicht, obwohl ich sie schon in unzähligen Varianten im MANIFEST angegeben hatte.

Was hab ich hier übersehen? Vielen Dank schonmal.
Gruß, pertze

Waxolunist
20-02-2007, 11:55
Am besten du gibst auch den Pfad beim Kompilieren an, wohin du kompilierst.

Kleiner Tipp: Leg dir argument-Files an:

Meine Ordnerstruktur:

File classes:



src\at\sterzl\util\hsql\ServerDBTest.java
src\at\sterzl\util\hsql\DBManagerFactory.java
src\at\sterzl\util\hsql\DBManager.java
src\at\sterzl\swt\WindowConfiguration.java


File argfile:


-d bin6
-g
-sourcepath src
-cp lib\org.eclipse.ui.workbench_3.1.2.jar;lib\org.ecl ipse.ui.forms_3.1.0.jar;lib\org.eclipse.swt.win32. win32.x86_3.1.2.jar;lib\org.eclipse.osgi_3.1.2.jar ;lib\org.eclipse.jface_3.1.1.jar;lib\org.eclipse.j face.text_3.1.2.jar;lib\org.eclipse.core.runtime_3 .1.2.jar;lib\org.eclipse.core.runtime.compatibilit y_3.1.0.jar;lib\org.eclipse.core.commands_3.1.0.ja r;lib\hsqldb.jar


bin - outputfolder für java 1.5
src
lib
resources
bin6 - testoutputfolder für java 1.6
classes - 1. Argumentfile
argfile - 2. Argumentfile

Kompilieren dann mit
javac @argfile @classes

Starten tu ich dann mit


java -cp lib\org.eclipse.ui.workbench_3.1.2.jar;li
b\org.eclipse.ui.forms_3.1.0.jar;lib\org.eclipse.s wt.win32.win32.x86_3.1.2.jar;lib\org.eclipse.osgi_ 3.1.2.jar;
lib\org.eclipse.jface_3.1.1.jar;lib\org.eclipse.jf ace.text_3.1.2.jar;lib\org.eclipse.core.runtime_3. 1.2.jar;li
b\org.eclipse.core.runtime.compatibility_3.1.0.jar ;lib\org.eclipse.core.commands_3.1.0.jar;lib\hsqld b.jar;bin6
at.sterzl.util.hsql.ServerDBTest

Also java -cp alle\meine\jars;outputfolder vollständiger.Klassenname

Alle Befehle geb ich aus meinem Projektfolder aus ein.

mfg, christian

pertze
20-02-2007, 12:13
Ok, das werde ich dann mal versuchen, danke.

pertze
20-02-2007, 13:26
Jup, mit einem seperaten Output Folder für die .class Dateien funktioniert es nun. Dank dir.

Liberty
21-02-2007, 16:49
Moin,

@Waxolunist:
Wäre nicht Ant in diesem Fall nicht auch eine gute (evtl. sogar bessere) Option?

Ich benutze mittlerweile eigentlich nur noch Ant...

So long,
Liberty

Waxolunist
22-02-2007, 14:54
Ant ist gut. Vor allem bei größeren Projekten.

Doch haben javac und java noch immer ihre Berechtigung. Und pertze wollte vielleicht erst mal mit diesen Tools umgehen lernen.

Zudem wenn ich mein build.xml selbst schreibe und nicht Eclipse machen lasse, so sind javac und java noch immer die Grundlage für jedes Ant-Problem.