"java" spinnt bei Packages!

  • Hi!
    Ich versuche ein Programm auszuführen, das sich in einem Package befindet. Wenn ich nicht von allen guten Geistern verlassen bin, dann hat das doch immer so funktioniert:

    java package.Klasse

    So in meinem Konkreten Fall sieht das so aus:

    java apr.reflection.MethodTester <..hier noch ein paar Parameter, aber die sind nicht relevant...>

    Ich war immer der Überzeugung, dass ich mich im Verzeichnis über "apr" befinden müsste, damit es funktioniert. Tut es nicht.
    Ich habe es von jedem möglichen Verzeichnis aus probiert, geht alles nicht. Ich habe versucht, die Punkte zwischen den Package Namen durch Slashes oder Backslashes zu ersetzen, hilft auch nichts.
    Immer wieder dasselbe:
    Exception in thread "main" java.lang.NoClassDefFoundError: apr/reflection/MethodTester
    Kleine Information am Rande: ich habe das Projekt mit Eclipse kompiliert, damit kann ich auch diese Klasse problemlos ausführen. Der Quellcode befindet sich nicht im selben Verzeichnis wie die Class-Dateien.

    Hat jemand eine Ahnung?

    mfg.
    java-girl

    There's no better place than 127.0.0.1!

  • Genial!
    Danke das funkt!
    Jetzt stellt sich nur noch eine Frage: warum geht es anders nicht?
    Geht es a) so überhaupt nicht (obwohl ich der festen Überzeugung war, dass es so gehen muss) oder b) nur bei mir einfach nicht???

    Nochmals vielen Dank!

    There's no better place than 127.0.0.1!

  • java sucht die user kompilierten Javaklassen ueber die Umgebungsvariable CLASSPATH. Standardmaessig is die ".". Wenn aba ein anderes Programm die ueberschreibt, passts nimma. Und imo passiert das ziemlich haeufig. Am besten immer wenn du ein Programm weitergibst -cp "." in den Aufruf packen, damit man sicher sein kann, das die Klassen gefunden werden.

    http://java.sun.com/j2se/1.5.0/docs/tooldocs/windows/classpath.html


  • wichtig hier noch zu erwähnen ist, dass wenn man jar files verwendet, diese ebenfalls in den classpath einbinden muss.

    => java -cp whatsoever.jar:secondjar.jar:. zustartendeclassdatei

    der doppelpunkt seperiert zwei oder mehrere classpaths. bei manchen versionen muss man aber ein ; verwenden :

    => java -cp whatsoever.jar;secondjar.jar:. zustartendeclassdatei

  • bei manchen versionen muss man aber ein ; verwenden :

    <klugscheiß>

    Um genau zu sein: Unter Linux muss man den Doppelpunkt verwenden, unter Windows den Strichpunkt.

    </klugscheiß>

  • warum müssen das wieder die windows leute anders machen als die linux leute oder umgekehrt. supi. nähmlich das war wieder ein problem das ich hatte bei reflection. ich wollte class dateien nachladen (ala plugins) die sich in einem unterordner relativ zum program befinden. das war alles wieder ein mords spielerei bis das ordentlich funktioniert hat, weil man nur die CP's auslesen kann (cp1:cp2 bzw. cp1;cp2) und dann von dort aus erst in den unterordner "springen" kann. also manchmal denke ich mir, manche standards sollten eingeführt werden ...

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!