Can't execute jar- file: "no main manifest attribute"

Telepítettem egy alkalmazást, amikor megpróbálom futtatni (ez egy futtatható jar), semmi sem történik. Ha a parancssorból futtatom a következővel:

java -jar "app.jar"

A következő üzenetet kapom:

no main manifest attribute, in "app.jar"

Normális esetben, ha magam készítettem volna a programot, akkor a manifeszt fájlhoz hozzáadtam volna egy main class attribútumot. De ebben az esetben, mivel a fájl egy alkalmazásból származik, ezt nem tehetem meg. Megpróbáltam kinyerni a jar-t is, hogy megnézzem, megtalálom-e a fő osztályt, de túl sok osztály van, és egyikben sem szerepel a "main" szó. Biztos van rá mód, hogy ezt kijavítsuk, mert a program más rendszereken is jól fut.

Először is, elég furcsa, hogy a java -jar "app" és nem a java -jar app.jar futtatását látom.

Másodszor, ahhoz, hogy egy jar futtatható legyen... szükséged van egy META-INF/MANIFEST.MF nevű fájlra.

magának a fájlnak (legalább) ezt az egy sort kell tartalmaznia:

Main-Class: com.mypackage.MyClass

Ahol com.mypackage.MyClass az az osztály, amely a public static void main(String[] args) belépési pontot tartalmazza.

Megjegyezzük, hogy ezt többféleképpen is el lehet végezni, akár a CLI-vel, akár a Maven, Ant vagy Gradle segítségével:

A CLI esetében a következő parancs elegendő: (tks @[dvvrt][1])

jar cmvf META-INF/MANIFEST.MF .jar 

A Maven esetében valami olyasmi, mint az alábbi részlet, megteszi a hatását. Vegye figyelembe, hogy ez csak a plugin definíciója, nem a teljes pom.xml:






      org.apache.maven.plugins
      maven-jar-plugin
      3.1.0
Kommentárok (11)

A java -jar app.jar helyett java -jar "app" kellett volna.

A -jar opció csak akkor működik, ha a JAR-fájl egy futtatható JAR-fájl, ami azt jelenti, hogy rendelkeznie kell egy manifeszt fájlban egy Main-Class attribútummal. A Programok csomagolása JAR-fájlokba című fejezetben megtudhatja, hogyan hozhat létre futtatható JAR fájlt.

Ha ez nem egy futtatható JAR, akkor a programot valami olyasmivel kell futtatnod, mint például:

java -cp app.jar com.somepackage.SomeClass

ahol com.somepackage.SomeClass az az osztály, amely tartalmazza a main metódust a program futtatásához. (Hogy mi ez az osztály, az a programtól függ, ezt lehetetlen megmondani az általad megadott információkból).

Kommentárok (10)

Ha a jar nem követi a szabályokat, akkor nem futtatható jar.

Kommentárok (2)