További
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.
861
3
Először is, elég furcsa, hogy a
java -jar "app"
és nem ajava -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:
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])
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:
A
java -jar app.jar
helyettjava -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 egyMain-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:
ahol
com.somepackage.SomeClass
az az osztály, amely tartalmazza amain
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).Ha a jar nem követi a szabályokat, akkor nem futtatható jar.