Kompilierte Klasse mit Namespace per CMD aufrufen

Hallo,

ich bin gerade dabei wieder mit Java etwas "rumzuspielen". Ich habe ein erstes Progrämmchen geschrieben, dass auf meinem Server zwei Ordner rekursiv vergleicht und mir das Delta zwischen beiden Ordnern per system.out.println ausgibt. Das funktioniert auch, allerdings nur aus meiner IDE heraus.

Wenn ich die Klasse im Ordner "src" mit dem Namespace org.example.folderdiff.FolderDiff.java kompiliere landet die .class Datei in einem out-Ordner. Allerdings habe ich keinen Schimmer, mit welchem Befehl ich diese dann ausführen kann. Navigiere ich in der CMD in den out\production\org\example\folderdiff-Ordner und rufe

java FolderDiff

auf kommt die Meldung

Error: Could not find or load main class FolderDiff.class

Allerdings liegt diese in genau dem Ordner. Wenn ich eine Klasse ohne Namespace direkt in das Projekt lege, dann kann ich sie auf die Art auch aufrufen. Ich würde aber gerne gleich "richtig" anfangen und mit Namespace rumspielen. Besonders jetzt, wo ich es nicht hinbekommen interessiert mich, warum.

Könnt ihr mir da bitte weiterhelfen?

Vielen Dank und viele Grüße

Jürgen
 
Hallo,

das hat leider nicht funktioniert. Ich habe auch etwas weiter gegoogled und ein Video auf YouTube gesehen, in dem auch der main class-Fehler auftritt. Dort hat der Entwickler über set class den bin-Ordner seines JDK gesetzt und über set classpath die rt.jar im lib-Ordner des JRE.

Danach habe ich erneut kompiliert über die Konsole und es ging trotzdem nicht.

Meine Klasse sieht wie folgt aus:

Code:
package org.example.folderdiff;

import java.io.File;

public class FolderDiff {
    public static void main(String[] args) {
        final File folder1 = new File("C:\\myFolder\\");
        final File folder2 = new File("C:\\myFolder2\\");
        FolderDiff.listFilesForFolder(folder, folder2);
    }

    public static void listFilesForFolder(final File folder, final File folder2) {
...
    }
}
So sieht meine Projektstruktur aus:
structure.png

Und so habe ich den Code von der CMD aus versucht aufzurufen:

e:\Java\FolderDiff\out\production\FolderDiff>java org.example.folderdiff.FolderDiff

Folgendes sagt java -version

Picked up _JAVA_OPTIONS: -Xmx1024M
java version "1.8.0_151"
Java(TM) SE Runtime Environment (build 1.8.0_151-b12)
Java HotSpot(TM) Client VM (build 25.151-b12, mixed mode)

Hat noch jemand eine Idee, was ich falsch mache? Gerne kann ich auch weitere Infos posten.

Vielen Dank und viele Grüße

Jürgen
 
Dann hast du vermutlich irgendwo eine CLASSPATH Umgebungsvariable gesetzt/verändert. Probiere es mal innerhalb des `out\production\FolderDiff` mit `java -cp . org.example.folderdiff.FolderDiff`
 
Guten Morgen httpdigest,

vielen Dank für deine Antwort. Das Java-Projekt habe ich frisch aufgesetzt. Änderungen am Classpath habe ich bewusst nirgends vorgenommen, außer diese "set classpath" und "set class"-Geschichten auf der CMD.

Der von dir genannte Befehl führt leider zu folgendem Fehler:

e:\Java\FolderDiff\out\production\FolderDiff>java -cp . org.examle.folderdiff.FolderDiff
Picked up _JAVA_OPTIONS: -Xmx1024M
Error: Could not find or load main class org.examle.folderdiff.FolderDiff

Ich teste das ja aktuell alles lokal auf meinem Windows-Rechner. Zum Einsatz soll es aber auf meinem Linux-Server (mit OpenMediaVault OS) kommen, deshalb ist es auch wichtig, dass ich es außerhalb der IDE laufen lassen kann. Soll ich die unkompilierten Dateien einfach mal auf den Server kopieren und dort per javac kompilieren? Könnte das funktionieren, oder steht die falsche Info irgendwo in den mitkopierten Dateien und gar nicht irgendwo in Windows?

Vielen Dank und viele Grüße

Jürgen
 
K

kneitzel

Schau mal bitte, wo genau die Datei FolderDiff.class liegt.

Liegt diese in e:\Java\FolderDiff\out\production\FolderDiff\org\example\folderdiff\?

Dem Bildschirmfoto entnehme ich ja ein e:\htdocs\java\FolderDiff\out\production\FolderDiff\org\example\folderdiff\

Daher solltest Du den Aufruf auch in e:\htdocs\java\FolderDiff\out\production\FolderDiff\ machen.
(Wobei ich mich frage, ob Du die Entwicklung wirklich in einem Pfad machst, der von einem Webbrowser angezeigt wird. Das ist eigentlich eher unüblich....)
 
Hallo kneitzel,

sorry für das Mißverständnis. Ich hatte das Projekt nach E:\Java\FolderDiff\out\production\FolderDiff\org\example\folderdiff verschoben bzw. neu angelegt und den Inhalt der FolderDiff.java-Datei in dieselbe Datei im neuen Verzeichnis kopiert. Unter E:\htdocs liegt nichts mehr, das nichts mit dem Webserver zu tun hat.

Das lag nur aus "Gewohnheit" darin, da ich einfach ein neues Projekt anfänglich angelegt und es in derselben Strutkur abgelegt habe, wie alle anderen Projekte - das waren tatsächlich Web-Porjekte - auch.

Viele Grüße

Jürgen
 
K

kneitzel

Also liegt die Datei FolderDiff.class unter e:\Java\FolderDiff\out\production\FolderDiff\org\example\folderdiff\?

Und bei dem, was Du gepostet hast:
java -cp . org.examle.folderdiff.FolderDiff
==> Tippfehler: example muss das heissen.

Also wenn die .class Datei so vorhanden ist, dann sollte der Aufruf auch funktionieren - so man alles richtig schreibt ...
 
Hallo kneitzel,

vielen Dank für deine Antwort.

Ja, die Klasse liegt in dem Ordner. Wo du definitiv Recht hast ist der Tippfehler! Oh man. Wenn der behoben ist, dann funktioniert es auch... Peinlich.

Vielen Dank!
 
Passende Stellenanzeigen aus deiner Region:

Neue Themen

Oben