Tiens, comme ce lien vient en premier dans la recherche Google sur le message "Failed to load Main-Class manifest attribute from xxx", je vais mettre le problème (et sa solution) que j'ai rencontré aujourd'hui...
J'ai trouvé un fichier jar de librairie (quickhull3d pour ne pas le nommer) qui a une classe de test (avec une méthode main() dedans, bien sûr).
J'ai essayé de lancer la classe avec la commande :
java -jar quickhull3d.jar quickhull3d.SimpleExample
et j'ai eu le message ci-dessus !
Je me suis gratté la tête un moment, j'ai cherché sur Internet (et trouvé cette page !), en vain (mais je ne suis pas le seul avec ce problème).
Et finalement, avec un éclair de génie (ou plutôt, de lucidité au-delà de la brume de stupidité qui me cachait la solution, que je connaissais pourtant...) j'ai essayé :
java -cp quickhull3d.jar quickhull3d.SimpleExample
et ça a fonctionné !
Bon, quelle est la différence ?
La première commande dit à Java de prendre le fichier .jar, d'ouvrir le fichier MANIFEST.MF dans le répertoire META-INF et de lire la ligne
Main-Class: package.of.class.with.Main
qui est sensée donner le classpath vers la classe ayant une méthode main() à exécuter.
Java a allègrement et silencieusement ignoré mon path... Et le jar n'ayant pas l'info requise, j'ai eu cette erreur.
La deuxième commande dit juste d'utiliser le jar comme classpath et d'aller y chercher la classe dont je donne le package et nom.
Différence subtile mais importante !
J'espère que cette information sera utile à quelqu'un.