Java Programm ausführen

y0dA

Erfahrenes Mitglied
Hi!
Habe einen Client für ein Webservice von mir geschrieben und möchte diesen Client nun jenseits der IDE ausführen.
Vorgehensweise?
Jar erstellen; am gewünschten Ort wieder entpacken und dann mittels Konsole die Klasse ansprechen welche die main() Methode besitzt?
Dies habe ich gemacht und bekomme eine NoClassDefinition Meldung -.-

Weiß jemand Rat?

**EDIT**
Also mein Problem ist dass ich anscheinend überhaupt keine main Methode in der Konsole ausführen kann, bekomme immer bspw:
Exception in thread "main" java.lang.NoClassDefFoundError: Test

mfg
 
Zuletzt bearbeitet:
Schwer einen Tipp zu geben, wenn man nicht genau weiß, was du machst. Ich rate einfach mal ins Blaue:

1. der Classpath ist nicht gesetzt (worauf auch immer: verwendete Jars, aktuelles Verzeichnis, ...)

2. Du versuchst aus dem falschen Verzeichnis zu starten. Ist deine Test-Klasse in irgendeinem Package und du versuchst zuerst in das Package zu wechseln und rufst die dort auf anstatt (wie es richtig wäre) die Klasse von außerhalb aufzurufen? (z.B. "java -cp . de.irgendwas.Test")

In vielen Fällen (nicht in allen, weil es z.B. bei verwendeten anderen Jar-Dateien Probleme geben kann, wenn's nicht richtig konfiguriert ist) ist das mit dem Entpacken gar nicht nötig. Z.B. Eclipse kann die Jar-Files so erzeugen, dass man sie hinterher mit einem Doppelklick starten kann, ganz ohne entpacken.
 
Hab nun eine Hello World Klasse und bei der klappt es schon nicht:

Pfade:
Classpath: C:\Programme\Java\jdk1.5.0_08\lib
Path: C:\Programme\Java\jdk1.5.0_08\bin
JAVA_HOME: C:\Programme\Java\jdk1.5.0_08

die klasse test liegt unter: c:\Test

Code:
public class Test{
	public static void main(final String[] args) {
	System.out.println("HALLO ALDA");
	}
}

**EDIT**
javac funktioniert einwandfrei!
also
javac Test.java --> klappt
java Test ---> klappt nicht

Wie kann man im Eclipse ausführbare JArs erzeugen?

mfg
 
Was für eine Fehlermeldung bekommst Du denn? Ich gehe mal davon aus, daß Du
Code:
 c:\Test>java Test
ausgeführt hast.
 
jo genauso führe ich es aus

Fehlermeldung:
Code:
Exception in thread "main" java.lang.NoClassDefFoundError: Test
 
So auf den ersten Blick würde ich mal behaupten, dass der Fehler im Classpath liegt.

Warum du da das Lib-Verzeichnis drin hast, wirst du wohl wissen (falls da Jars drin sind, muss der auf jede einzelne Jar gesetzt werden). Aber der Fehler ist, dass er halt NUR darauf steht. Also wenn das mit dem Lib-Verzeichnis so richtig ist, änder den Classpath bitte auf:

C:\Programme\Java\jdk1.5.0_08\lib;.

Der Punkt bewirkt, dass er nicht nur im Lib-Verzeichnis nach deiner Test-Klasse sucht, sondern halt auch im aktuellen Verzeichnis, in dem sich gerade deine Konsole befindet.

Alternativ kannst du natürlich auch hingehen und dein Programm über
Code:
c:\Test>java -cp . Test
starten.

edit:
Achja, Eclipse :)

Du gehst einfach auf Export -> Java -> Jar File, wählst deine Klassen aus (die .class-Files reichen völlig, .java-Dateien müssen da nicht bei sein), klickst 2 mal auf Next und trägst dann dort halt in dem Feld für "Main Class" die Klasse ein, die die Main-Methode hat. Dann noch Finish und du bist fertig. Ob der Rechner dann hingeht und das Jar-File beim Doppelklick startet oder per WinZip oder sonstiges öffnet hängt allerdings von den Windowseinstellungen ab. Bei mir steht da unter Ordneroptionen -> Dateitypen unter Jar als Programm mit dem es geöffnet wird "Java(TM) 2 Platform Standard Edition binary", welche Exe das ist kann ich leider gerade nicht nachgucken, weil ich kein Admin an dem Rechner bin :)

Wie gesagt, wenn noch andere Jars verwendeten werden klappt sowas nicht immer ... wie es dann genau geht (ohne alle Jars zu entpacken und von Hand reinzukopieren) kann ich so auf Anhieb auch nicht sagen, wurde hier aber oft besprochen, von daher wird die Suchfunktion bestimmt was liefern :)
 
Zuletzt bearbeitet:
Jo danke, der Punkt wars - oh mann ist schon wieder solange her bei mir (wenn ich mal keine IDE hab isses wohl vorbei ;( ).

Vielen dank!

Betreffend Lib im Classpath - setzt man das nicht so? soll ich lib weglassen?

mfg
 
Also mein Classpath hier an dem Rechner steht auf "C:\Programme\Java\jdk1.5.0_10\lib\tools.jar;." - Warum weiß ich auch nicht (also was in den tools so alles drin ist *g*). Was ich nur sagen wollte, war halt, dass dir der Classpath auf dem Lib-Verzeichnis nichts bringt, wenn da nur Jars drin sind. Dann musst du die verwendeten Jars nämlich alle einzeln im Classpath aufführen. Allerdings störts aber auch nicht den so zu lassen wie er ist :)
 
Ok dann nur noch eine Fräge diesbezüglich
wie rufe ich nun eine Klasse auf die in folgender package struktur ist:
at.pcd.wam.technologie.batch.RunBatch.java

Bzw wie kann ich das Teil aus einem Jar heraus aufrufen?


mfg


**EDIT**
Bekomme folgende Meldung wenn ich meine Main ausführen möchte:
Code:
C:\Client\at\pcd\wam\technologie\batch>java RunBatch
Exception in thread "main" java.lang.NoClassDefFoundError: RunBatch
 at/pcd/wam/technologie/batch/RunBatch)
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(Unknown Source)
        at java.security.SecureClassLoader.defineClass(Unknown Sourc
        at java.net.URLClassLoader.defineClass(Unknown Source)
        at java.net.URLClassLoader.access$000(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)
 
Zuletzt bearbeitet:
Zurück