Kan het jar-bestand niet uitvoeren: "geen hoofdmanifest-attribuut"

Ik heb een applicatie geïnstalleerd, wanneer ik het probeer uit te voeren (het is een uitvoerbare jar) gebeurt er niets. Als ik het vanaf de commandline uitvoer met:

java -jar "app.jar"

Krijg ik de volgende melding:

no main manifest attribute, in "app.jar"

Normaal gesproken, als ik het programma zelf had gemaakt, zou ik een main class attribuut hebben toegevoegd aan het manifest bestand. Maar in dit geval, omdat het bestand van een applicatie is, kan ik dat niet doen. Ik heb ook geprobeerd de jar uit te pakken om te zien of ik de main class kon vinden, maar er zijn te veel classes en geen van hen heeft het woord "main" in zijn naam. Er moet een manier zijn om dit op te lossen, want het programma draait prima op andere systemen.

Ten eerste, het is een beetje vreemd, om te zien dat je java -jar "app" uitvoert en niet java -jar app.jar

Ten tweede, om een jar uitvoerbaar te maken... moet je een bestand genaamd META-INF/MANIFEST.MF

het bestand zelf moet (op zijn minst) deze ene regel hebben:

Main-Class: com.mypackage.MyClass

Waar com.mypackage.MyClass de klasse is die het public static void main(String[] args) entry point bevat.

Merk op dat er verschillende manieren zijn om dit voor elkaar te krijgen, hetzij met de CLI, Maven, Ant of Gradle:

Voor CLI is het volgende commando voldoende: (tks @[dvvrt][1])

jar cmvf META-INF/MANIFEST.MF .jar 

Voor Maven zou iets als het volgende stukje moeten werken. Merk op dat dit alleen de plugin definitie is, niet de volledige pom.xml:






      org.apache.maven.plugins
      maven-jar-plugin
      3.1.0
Commentaren (11)

Dat had moeten zijn java -jar app.jar in plaats van java -jar "app".

De -jar optie werkt alleen als het JAR bestand een uitvoerbaar JAR bestand is, wat betekent dat het een manifest bestand moet hebben met een Main-Class attribuut erin. Zie Packaging Programs in JAR Files om te leren hoe je een uitvoerbare JAR maakt.

Als het'geen uitvoerbare JAR is, dan moet je'het programma uitvoeren met iets als:

java -cp app.jar com.somepackage.SomeClass

waarbij com.somepackage.SomeClass de klasse is die de main methode bevat om het programma uit te voeren. (Wat die klasse is hangt af van het programma, het is onmogelijk te zeggen uit de informatie die je hebt verstrekt).

Commentaren (10)

Als het potje niet aan de regels voldoet, is het geen uitvoerbaar potje.

Commentaren (2)