Eine Jar-Datei in der Eingabeaufforderung erstellen?


16.06.2021, 18:11

Die Fehlermeldung:

1 Antwort

Vom Fragesteller als hilfreich ausgezeichnet

Der erste Teil ist der Packagename. Steht ganz oben in der Java Klasse

package de.galileocomputing.schroedinger.java.kapitel13

Damit du aber auf diese Klasse und nicht nur auf das Package zeigst, muss dahinter mit einem Punkt getrennt noch der Klassenname, also ist das Ergebnis so:

de.galileocomputing.schroedinger.java.kapitel13.HalloSchroedinger

Der 2. Teil nach dem "SagHallo.jar" ist der Ort der kompilierten Klasse. Die Datei, die du mit dem erstem Befehl erstellt hast.

Morgoth364 
Fragesteller
 16.06.2021, 17:53

Ich habe das jetzt mal damit ausprobiert, aber es wird wieder eine ClassNotFoundException geworfen...

0
chriss1967  16.06.2021, 17:57
@Morgoth364

Wie genau sieht denn der Fehler aus? Kannst du den mal teilen? Also alles davon und nicht nur "ClassNotFoundException"

0
chriss1967  16.06.2021, 20:46
@Morgoth364

Ich hab gerade mal dein Szenario bei mir nachgestellt und das Problem gefunden:

jar cf ...

Dieser Befehl, erstellt die jar Datei nach einem bestimmten Schema, je nachdem wie du den Pfad zu der .class Datei angibst (Du solltest bei dem Befehl auch die .class Datei und nicht die .java Datei angeben, es funktioniert aber mit beidem).

In Java wird das Package durch die Ordner repräsentiert. Also bei "de.galileocomputing.schroedinger.java.kapitel13" muss jeder name (zwischen den Punkten) ein einzelner Ordner sein. Der erste Ordner ist also "de" in diesem Ordner ist dann der Ordner "galileocomputing" usw. im Ordner kapitel13 ist dann die "HalloSchroedinger.java" bzw. "HalloSchroedinger.class".

Wenn du den Befehl so ausführst, wie du es in der Frage geschrieben hast, werden allerdings die Ordner "Users", "Documents", etc. AUCH mit in der Jar Datei erstellt. (Du kannst dir das ansehen, wenn du die .jar Datei einfach mal mit WinRar oder 7zip öffnest. Du musst zuerst mit der Eingabeaufforderung in das Verzeichnis "src" navigieren und dann den relativen Pfad zu der .class Datei angeben also "de\galileocomputing\schroedinger\java\kapitel13\HalloSchroedinger.class" Dann werden nur die Ordner ab "de" innerhalb der .jar Datei erstellt

1
Morgoth364 
Fragesteller
 17.06.2021, 16:48
@chriss1967

Ich hätte jetzt doch noch eine andere Frage. Wie kann man eine Main-Klasse über die CMD compilieren, wenn dort ein Objekt einer anderen Klasse erstellt wird?

Die erste Klasse:

package de.galileocomputing.schroedinger.java.kapitel13.Musik;

public class MusikAnlage {

    public void musikHoeren() {
        System.out.println("La, la, la, Listen to my heart");
    }
}

Die Main-Klasse:

package de.galileocomputing.schroedinger.java.kapitel13.Musik;

public class Main {

    public static void main(String[] args) {

        MusikAnlage stereoAnlage = new MusikAnlage();
        stereoAnlage.musikHoeren();

    }
}

Die "MusikAnlage" Klasse kann ich ohne Probleme compilieren, doch bei der Main-Klasse kommt folgenden Fehlermeldung:

javac Main.java

Main.java:7: error: cannot find symbol
                MusikAnlage stereoAnlage = new MusikAnlage();
                ^
  symbol:   class MusikAnlage
  location: class Main
Main.java:7: error: cannot find symbol
                MusikAnlage stereoAnlage = new MusikAnlage();
                                               ^
  symbol:   class MusikAnlage
  location: class Main
2 errors

Ich hoffe du kannst mir auch diesmal weiterhelfen!

0
chriss1967  17.06.2021, 17:37
@Morgoth364

Dazu musst du die Klasse "MusikAnlage" noch in der Klasse "Main" importieren. Das geht einfach mit der Zeile "import de.galileocomputing.schroedinger.java.kapitel13.Musik.MusikAnlage" Dann solltest du beides kompilieren können.

Ich vermute du schreibst die Java Klassen in einem einfachen Text-Editor, versuche doch mal eine richtige Entwicklungsumgebung wie z.b. IntelliJ oder Eclipse. Die können die Sachen wie import etc. von alleine und können dir auch direkt eine Jar erstellen, ohne das du das erst selbst über die Eingabeaufforderung alles eingeben musst

0
Morgoth364 
Fragesteller
 17.06.2021, 19:20
@chriss1967

Wenn ich da noch "import" hinzufüge, steht bei der Fehlermeldung noch zusätzlich:

Main.java:3: error: cannot find symbol
import de.galileocomputing.schroedinger.java.kapitel13.Musik.MusikAnlage;
                                                            ^
  symbol:   class MusikAnlage
  location: package de.galileocomputing.schroedinger.java.kapitel13.Musik
Main.java:9: error: cannot find symbol
                MusikAnlage stereoAnlage = new MusikAnlage();
                ^
  symbol:   class MusikAnlage
  location: class Main
Main.java:9: error: cannot find symbol
                MusikAnlage stereoAnlage = new MusikAnlage();
                                               ^
  symbol:   class MusikAnlage
  location: class Main
3 errors

Und ich habe auch schon Eclipse, nur das Buch, mit welchem ich Java lerne, macht ab und zu mal auch etwas über die Eingabeaufforderung...

0
chriss1967  17.06.2021, 19:41
@Morgoth364

Sorry das mit dem Import war falsch, das ist nur notwendig, wenn Klassen unterschiedliche Packages haben. Das Problem ist das nacheinander kompilieren. Du musst beides gleichzeitig kompilieren. Einfach anstatt hinter javac nur die MusikAnlage.java anzugeben, einfach noch die Main.java dahinter

javac MusikAnlage.java Main.java
0