Home > Back-end >  error executing a jar: "no main manifest attribute"
error executing a jar: "no main manifest attribute"

Time:03-19

I want to use this Java program. I extracted the zip and changed in the directory and made the jar executable. Then I run following command

java -Xmx512m -classpath lib/controlP5.jar;lib/core.jar;lib/toxiclibs_p5.jar;lib/toxiclibscore.jar;lib/SolarSystemTravel.jar com.strobe.orbit.SolarSystemTransport

(found in SolarSystemTravel.b__)

But it does not work. I'm using Linux Mint MATE 20.2 and

openjdk version "17.0.2" 2022-01-18
OpenJDK Runtime Environment (build 17.0.2 8-Ubuntu-120.04)
OpenJDK 64-Bit Server VM (build 17.0.2 8-Ubuntu-120.04, mixed mode, sharing)

The error is

Verwendung: java [Optionen] <mainclass> [args...]
           (zur Ausführung einer Klasse)
   oder  java [Optionen] -jar <jarfile> [args...]
           (zur Ausführung einer JAR-Datei)
   oder  java [Optionen] -m <module>[/<mainclass>] [args...]
       java [Optionen] --module <module>[/<mainclass>] [args...]
            (zur Ausführung der Hauptklasse in einem Modul)

 Argumente, die auf die Hauptklasse folgen, -jar <jarfile>, -m oder --module
 <module>/<mainclass> werden als Argumente für die Hauptklasse übergeben.

 wobei "Optionen" Folgendes umfasst:

    -zero     zur Auswahl der "zero" VM
    -dcevm    zur Auswahl der "dcevm" VM
    -cp <Klassensuchpfad mit Verzeichnissen und ZIP-/JAR-Dateien>
    -classpath <Klassensuchpfad mit Verzeichnissen und ZIP-/JAR-Dateien>
    --class-path <Klassensuchpfad mit Verzeichnissen und ZIP-/JAR-Dateien>
                  Eine durch : getrennte Liste mit Verzeichnissen, JAR-Archiven
                  und ZIP-Archiven, in denen nach Klassendateien gesucht wird.
    -p <Modulpfad>
    --module-path <Modulpfad>...
                  Eine durch : getrennte Liste mit Verzeichnissen, von denen jedes Verzeichnis
                  ein Verzeichnis mit Modulen ist.
    --upgrade-module-path <Modulpfad>...
                  Eine durch : getrennte Liste mit Verzeichnissen, von denen jedes Verzeichnis
                  ein Verzeichnis mit Modulen ist, die upgradefähige
                  Module im Laufzeitimage ersetzen
    --add-modules <Modulname>[,<Modulname>...]
                  Root-Module, die zusätzlich zum anfänglichen Modul aufgelöst werden sollen.
                  <Modulname> kann auch wie folgt lauten: ALL-DEFAULT, ALL-SYSTEM,
                  ALL-MODULE-PATH.
    --list-modules
                  Listet beobachtbare Module auf und beendet den Vorgang
    -d <Modulname>
    --describe-module <Modulname>
                  Beschreibt ein Modul und beendet den Vorgang
    --dry-run     Erstellt eine VM und lädt die Hauptklasse, führt aber nicht die Hauptmethode aus.
                  Die Option "--dry-run" kann nützlich sein, um die
                  Befehlszeilenoptionen, wie die Modulsystemkonfiguration, zu validieren.
    --validate-modules
                  Validiert alle Module und beendet den Vorgang
                  Die Option "--validate-modules" kann nützlich sein, um
                  Konflikte und andere Fehler mit Modulen auf dem Modulpfad zu ermitteln.
    -D<Name>=<Wert>
                  Legt eine Systemeigenschaft fest
    -verbose:[class|module|gc|jni]
                  Ausgabe im Verbose-Modus aktivieren
    -version      Gibt die Produktversion an den Fehlerstream aus und beendet den Vorgang
    --version      Gibt die Produktversion an den Outputstream aus und beendet den Vorgang
    -showversion  Gibt die Produktversion an den Fehlerstream aus und setzt den Vorgang fort
    --show-version
                  Gibt die Produktversion an den Outputstream aus und setzt den Vorgang fort
    --show-module-resolution
                  Zeigt die Modulauflösungsausgabe beim Start an
    -? -h -help
                  Gibt diese Hilfemeldung an den Fehlerstream aus
    --help        Gibt diese Hilfemeldung an den Outputstream aus
    -X            Gibt Hilfe zu zusätzlichen Optionen an den Fehlerstream aus
    --help-extra  Gibt Hilfe zu zusätzlichen Optionen an den Outputstream aus
    -ea[:<packagename>...|:<classname>]
    -enableassertions[:<packagename>...|:<classname>]
                  Aktiviert Assertions mit angegebener Granularität
    -da[:<packagename>...|:<classname>]
    -disableassertions[:<packagename>...|:<classname>]
                  Deaktiviert Assertions mit angegebener Granularität
    -esa | -enablesystemassertions
                  Aktiviert System-Assertions
    -dsa | -disablesystemassertions
                  Deaktiviert System-Assertions
    -agentlib:<libname>[=<options>]
                  Lädt die native Agent Library <libname>. Beispiel: -agentlib:jdwp
                  siehe auch -agentlib:jdwp=help
    -agentpath:<pathname>[=<options>]
                  Lädt die native Agent Library mit dem vollständigen Pfadnamen
    -javaagent:<jarpath>[=<options>]
                  Lädt den Java-Programmiersprachen-Agent, siehe java.lang.instrument
    -splash:<imagepath>
                  Zeigt den Startbildschirm mit einem angegebenen Bild an
                  Skalierte HiDPI-Bilder werden automatisch unterstützt und verwendet,
                  falls verfügbar. Der nicht skalierte Bilddateiname (Beispiel: image.ext)
                  muss immer als Argument an die Option "-splash" übergeben werden.
                  Das am besten geeignete angegebene skalierte Bild wird
                  automatisch ausgewählt.
                  Weitere Informationen finden Sie in der Dokumentation zur SplashScreen-API
    @argument files
                  Eine oder mehrere Argumentdateien mit Optionen
    -disable-@files
                  Verhindert die weitere Erweiterung von Argumentdateien
Um ein Argument für eine lange Option anzugeben, können Sie --<Name>=<Wert> oder
--<Name> <Wert> verwenden.

kein Hauptmanifestattribut, in /home/me/Schreibtisch/sim/istage1_zusatzmaterial_java-programm/lib/core.jar
kein Hauptmanifestattribut, in /home/me/Schreibtisch/sim/istage1_zusatzmaterial_java-programm/lib/toxiclibs_p5.jar
kein Hauptmanifestattribut, in /home/me/Schreibtisch/sim/istage1_zusatzmaterial_java-programm/lib/toxiclibscore.jar
kein Hauptmanifestattribut, in /home/me/Schreibtisch/sim/istage1_zusatzmaterial_java-programm/lib/SolarSystemTravel.jar

Can I solve this problem or can only the programmer fix the problem?

CodePudding user response:

The classpath separator is only ; (semicolon) on Windows. Since you're on Linux, you need to be using : (colon) to separate classpath entries. Your shell is interpreting the semicolon as something totally unrelated and confusing Java.

Just replace all of the semicolons with colons in the command you're invoking.

  •  Tags:  
  • java
  • Related