2010-01-30 7 views
6

J'ai essayé de créer un pot exécutable en utilisant cette commande:Pourquoi jar ignore-t-il mon manifeste?

jar -cvfm h.jar Manifest.mf Whatever1.class Whatever2.class 

Le manifeste contient ceci:

Main-Class: Whatever1 

Mais si je tente de lancer le pot, je reçois: Failed to load Main-Class manifest attribute from my.jar. J'extrait le pot, et j'ai vu que le contenu de c'est manifeste était ceci:

Manifest-Version: 1.0 
Created-By: 1.6.0_18 (Sun Microsystems Inc.) 

Pourquoi at-on ignoré mon manifeste?

EDIT: Je sais qu'en utilisant le drapeau -e je peux spécifier un point d'entrée, et jar va générer un manifeste correct, mais j'aimerais savoir comment faire fonctionner cette version.

+0

Essayez http://java.sys-con.com/node/36995 – Pace

Répondre

15

Ajouter un saut de ligne après la dernière ligne de Manifest.mf

+0

Est-ce une fonctionnalité? LOL! – Geo

+0

a sauvé ma journée. m'a pris une heure de déconner jusqu'à ce que je trouve ta réponse. – Matthias

+0

a été frustré jusqu'à ce que j'ai vu votre poste –

0

Je suppose que vous devez exécuter pot comme:

jar -cvf h.jar -m Manifest.mf Whatever1.class Whatever2.class

Parce que les valeurs des options viennent directement après l'option elle-même.

+2

Cela dit: «-m: aucun fichier ou répertoire». – Geo

2

J'ai remarqué que de ne pas avoir une nouvelle ligne à la fin du fichier manifeste provoque ce problème parfois. Voir si l'ajout d'une nouvelle ligne à la fin du fichier manifeste aide.