[Eclipse -> Konsole] Eclipse Projekt in Konsole kompilieren/ausführen

IluOMat

Grünschnabel
Hallo,

Ich möchte ein Programm, das ich in Eclipse entwickelt habe nun in der Konsole kompilieren und ausführen. Das Programm benutzt eine externe jar für 2 imports und leitet die Klasse daraus ab. Deswegen gebe ich beim compilieren diese als -cp Parameter an. Dadurch kompiliert er ohne Fehler.

Kompilieren:
javac -cp (...jar) TreeBalance.java
Ausführen:
java TreeBalance (param)

Nun funktioniert aber das Ausführen des Programms nicht mehr und gibt die Fehlermeldung
Code:
Exception in thread "main" java.lang.NoClassDefFoundError: TreeBalance
Caused by: java.lang.ClassNotFoundException: TreeBalance
        at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
Could not find the main class: TreeBalance.  Program will exit.
aus.

In Eclipse funktioniert es ohne Probleme...d.h. ich mache wohl etwas beim Kompilieren/Ausführen falsch...
Zusatzinfos:
Umgebungsvariablen sind richtig gesetzt und an der Benennung von Klassen liegt es auch nicht. "main" Methode auch vorhanden.

Prog aufbau:
Code:
import ...

@SuppressWarnings("deprecation")
public class TreeBalance extends DefaultHandler{
	...
}

Grüße...
 
Zuletzt bearbeitet:
Hi und willkommen bei tutorials.de,
wenn du eine so gute Entwicklungsumgebung, wie Eclipse schon verwendest, dann solltest du diese auch zum Jar-Datei erstellen benutzen.

Wie funktionierts?
1. Rechtsklick auf den Projektordner
2. "Export..." auswählen
3. Java -> "Runnable Jar file" auswählen
4. Main-Klasse bei Launch configuration raussuchen und auswählen
5. Export destination mit gewünschten Jar-Dateinamen angeben
6. Library handling: "Package required libraries into generated JAR" auswählen
7. Finish - Fertig!

Gruß

Fabio
 
Danke für die Antwort, aber sie löst mein Problem insofern nicht, als das ich die Konsolenbenutzung nur brauche, weil es eine Abgabe für die Uni ist.

Es ist für diese spezielle Vorlesung (die sich hauptsächlich mit XML beschäftigt) auch wahrscheinlich das einzige Mal, das wir eine Java Klasse abgeben sollen und sie ist sagen wir mal vorsichtig "didaktisch eher schlecht", weswegen dieses Problem erst auftritt ;)

Um konkreter zu werden: Ich leite die TreeBalance Klasse (=Dateiname) von einer Klasse aus einem JDK-Paket ab (org.xml.sax.helpers.DefaultHelper) und benutze später noch eine Klasse aus der Xerces Distribution von Apache (org.apache.xml.serialize.*), die in einer xercesImpl.jar verfügbar sind. Ursprünglich sollten wir einen Serializer aus dem JDK nehmen (rt.jar -> com.sun.org.apache.xml.internal.serialize.*) , die allerdings restricted ist. Also eine Lösung wäre wahrscheinlich auch, wenn ich wüsste, wie ich dieses restricted Pakage benutzen könnte (ich weiß das beides depreciated ist, aber das stört den Prof nicht. Die Serializer aus javax dürfen wir genausowenig, wie auf DOM-basierende Lösungen verwenden -.-).

Es müsste also ja auch irgendwie möglich sein, das ganze Konsolenbasiert mit -cp oder anderen Kompilerdirektiven zu kompilieren/aufzurufen.
 
Wenn du den Exporter von Eclipse nimmst, sucht der dir schon alle benötigten Libraries zusammen. Vorausgesetzt die benötigten Libraries sind im Build-Path.

Eine weitere Möglichkeit wäre es, einen Ant-Task zu basteln. Bei diesem Verfahren kannst du die benötigten Libraries selber angeben.

Aber du kannst es natürlich auch über Java direkt machen, wobei ich dir das nicht empfehlen würde, da das wohl mit Abstand der schwierigste Weg ist. ;)

Gruß

Fabio
 
Also vorneweg: Eclipse in Ehren -> Aber ich verlange von einem Entwickler schon, dass er einen Kompiler benutzen kann. Ist ja eigentlich auch keine Hexerei, man ist einfach zu verwöhnt mit den ganzen IDE's und macht es wirklich auch nur, wenn man in einem Forum ist oder man einen neuen Lehrling bekommt ^^

Package vergessen?

Hier die Klasse (liegt bei mir unter c:\Temp\tmp\helloworld\HelloWorld.java)
Code:
package helloworld;

import org.xml.sax.helpers.DefaultHandler;

public class HelloWorld extends DefaultHandler {
	public HelloWorld() {
		System.out.println("Hello World");
	}

	public static void main(String[] args) {
		new HelloWorld();
	}
}

hier meine Konsole
Code:
c:\Temp\tmp>d:\j2ee\jdk\jdk1.6.0_21\bin\javac c:\temp\tmp\helloworld\HelloWorld.java

c:\Temp\tmp>java HelloWorld
Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld
Caused by: java.lang.ClassNotFoundException: HelloWorld
        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)
Could not find the main class: HelloWorld.  Program will exit.

c:\Temp\tmp>java helloworld.HelloWorld
Hello World
 
@slowfly Danke für die Unterstellung, aber ich kann durchaus mit dem Compiler umgehen, nur hatte ich dieses Problem in der Form bisher nicht. Und ein Package braucht man nicht zwingend, um etwas zu kompilieren... (Auch wenn es guter Stil wäre, aber das ist nur ne Uni-Abgabe und der Prof will explizit das Default Package)

Problemlösung war leider so simpel wie dämlich: Nachdem irgendeine Seite mal wieder Quicktime haben wollte und ich dieses installiert hatte, waren wieder die CLASSPATH-Werte auf QT gesetzt... Und beim Neusetzen auf die JDK-Verzeichnisse u.a. hab ich dann wohl das "." als CLASSPATH Wert vergessen... d.h. sowohl das voranstellen von ".;" an die CP-Var, als auch das ausführen mit "java -cp . TreeBalance <param>" funktioniert.

Ich bedanke mich hiermit bei Apple für dieses super Quicktime-Installer *grrr*
 
@slowfly Danke für die Unterstellung

Sorry, des war keine Unterstellung an dich, sondern eine Art Aufruf an diejenigen, die dir geraten haben, das ganze in Eclipse zu machen ;) - oder anders ausgedrückt: Die Fähigkeit ein Problem zu lösen ist das Produkt von Wissen und Erfahrung (oder sagt man die Summe?); Wenn du nicht weisst, wie du Klassen kompilierst und ausführst, weisst du es erst recht nicht, wenn die IDE dich im Stich lässt...

/klug-sh1ce-modus ;P
 

Neue Beiträge

Zurück