Java Kann Programm nicht aus Terminal starten

WhiZZler

Chancentod²
ID: 85586
L
6 Mai 2006
588
32
Begrüße!

Ich bin irgendwie zu blöd, um ein Programm vom Terminal aus zu starten. Wahrscheinlich mache ich irgendwas Grundlegendes einfach nur sensationell falsch.

Im Rahmen eines Uni Projektes möchte ich crawler4j erweitern. Ich habe den Code ausgecheckt und mir ein Projekt in eclipse angelegt. Wenn ich aus eclipse eine der Dateien mit main Methode über den "Run" Befehl starte, dann funktioniert alles genau so, wie es soll.

Wenn ich es aber über die Kommandozeile versuche, dann funktioniert nichts. Irgendwas mache ich wohl mit classpath und co falsch..

Den Source Code findet man frei zugänglich im trunk des Projekts: https://crawler4j.googlecode.com/svn/trunk/

Ich habe den Code im Paket mit ant kompiliert (mit der build.xml im root Verzeichnis). Ging alles ohne Fehlermeldungen.

Die Verzeichnisstruktur:
Code:
.
[b]./lib[/b]
./target
./target/classes
./target/classes/mycrawler
./target/classes/edu
    ... 
    ... 
./src
    ... 
    ... 
./.settings
[b]./build[/b]
[b]./build/mycrawler[/b]
./build/edu
./build/edu/uci
./build/edu/uci/ics
./build/edu/uci/ics/crawler4j
./build/edu/uci/ics/crawler4j/example
./build/edu/uci/ics/crawler4j/example/imagecrawler
./build/edu/uci/ics/crawler4j/example/simple
./build/edu/uci/ics/crawler4j/example/advanced
./build/edu/uci/ics/crawler4j/crawler
./build/edu/uci/ics/crawler4j/util
./build/edu/uci/ics/crawler4j/url
./build/edu/uci/ics/crawler4j/frontier
./build/edu/uci/ics/crawler4j/robotstxt
./resources

build/mycrawler ist von mir. Dort liegt eine Datei "Controller.class", in der die main Methode steht. Wenn ich im Projektverzeichnis (also . )
Code:
java mycrawler.Controller
aufrufe, dann bekomme ich die Fehlermeldung:
Code:
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/log4j/Logger

Der logger liegt im Verzeichnis ./lib in der Datei log4j-1.2.15.jar
Ich habe jetzt schon Ewigkeiten mit dem classpath rumgespielt, diesen in meinen Umgebungsvariablen angepasst, direkt beim Programmaufruf mit java -cp ~/workspace/crawler4j/lib mycrawler.Controller usw. Aber an dem Fehler ändert sich nichts.
Meine Annahme ist, dass es doch reichen müsste, wenn das build Verzeichnis und das lib Verzeichnis im classpath stehen. Aber dem ist nicht so!

Da mir langsam Geduld und Ideen ausgehen dieser Thread.. Vielleicht fällt einem ja direkt auf, was ich falsch mache.. Da es in eclipse problemlos funktioniert liegt es entweder an falschen Parametern beim aufruf oder an ant.. Letzteres fände ich unschön, weil ich mich damit nicht auskenne. Leider gibt es zu crawler4j auch keine wirkliche Doku.

Auf jeden Fall danke an diejenigen, die sich meine Ergüsse angetan haben.
MfG,
whizzler
 
Moin.

Hier mal ein Halbwissen-Post, weil ich es auch immer vorgezogen hab, Eclipse größere Projekte starten zu lassen, als mich mit dem Classpath abzumühen:

Im Classpath müssen iirc alle Libs einzeln drinstehen; also jedes Jar einzeln mit Pfad angeben. Nur den Pfad hinknallen reicht ned (wobei ich mit Google gesehen hab, dass in Java6 jetzt auch Wildcards à la "path/to/lib/*" gehen sollen).
 
Danke für die Antwort!

Krasse Sache. Irgendwo hatte ich das bei meinen unzähligen Debugging Versuchen gelesen, dass die jars einzeln eingebunden werden müssen. Aber ich habe es nicht geglaubt, ich Trottel :D Das mit der Wildcard habe ich nicht hinbekommen. Kann aber auch sein, dass die Syntax nicht richtig war.

Jetzt läuft es aber. Es gibt zwar noch ein paar Warnungen wegen irgendwelcher Konfigurationsdateien, die nicht gefunden werden, aber dafür ist es mir heute zu spät!

Danke nochmal für den Hinweis!