«No main manifest attribute» : pourquoi Java ne voit pas le point d'entrée dans un JAR et comment y remédier

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Introduction : découverte de l'erreur qui effraie les débutants



Vous avez écrit un programme en Java, vous l'avez compilé, empaqueté dans un fichier JAR et vous essayez fièrement de l'exécuter en double-cliquant — mais au lieu de la fenêtre de l'application, vous voyez une fenêtre de terminal noire avec un message effrayant : Can't execute jar- file: "no main manifest attribute". Cela vous dit quelque chose ? Si non, considérez que vous avez eu de la chance (pour l'instant).



Cette erreur est l'une des plus populaires sur Stack Overflow. Imaginez : des milliers de développeurs, des étudiants aux ingénieurs expérimentés, ont rencontré au moins une fois dans leur vie le fait que leur fichier JAR « refuse » de s'exécuter. Pourquoi cela se produit-il ? Le problème est que Java n'est pas simplement « emballe et exécute ». La machine virtuelle doit savoir clairement : quelle classe contient le point d'entrée ? Sans cette information, le fichier JAR reste une simple archive, et non un programme exécutable.



Dans cet article, nous allons comprendre ce qu'est le manifeste, comment il est lié au point d'entrée, et — surtout — comment faire en sorte que votre fichier JAR s'exécute sans erreur. Nous irons du simple au complexe : de la construction manuelle en ligne de commande à la configuration de l'IDE. C'est parti !



Qu'est-ce que le manifeste et à quoi sert-il ?



Chaque fichier JAR (Java Archive) contient à l'intérieur un dossier META-INF, et dans celui-ci, un fichier MANIFEST.MF. Ce n'est pas simplement un artefact technique, mais une véritable « notice d'utilisation » pour la machine virtuelle Java.



Imaginez un livre sans table des matières. Vous savez qu'il contient des chapitres, mais vous ne savez pas à quelle page commencer la lecture. Il se passe à peu près la même chose avec un fichier JAR sans indication de la classe principale. La machine virtuelle voit de nombreuses classes, mais ne sait pas laquelle contient la méthode public static void main(String[] args).



Un fichier MANIFEST.MF typique ressemble à ceci :



Manifest-Version: 1.0Created-By: 17.0.2 (Oracle Corporation)Main-Class: com.example.Main


La ligne la plus importante ici est Main-Class. Elle indique le nom complet de la classe (avec le package) que Java doit exécuter. Si cette ligne est absente ou incorrecte, vous obtenez cette fameuse erreur « no main manifest attribute ».



Pourquoi le manifeste peut-il être vide ou incorrect ?



  • Construction manuelle via jar — si vous n'avez pas spécifié le drapeau -e ou créé votre propre manifeste.
  • Construction dans un IDE sans configuration — certains environnements de développement (en particulier les anciennes versions) n'ajoutent pas Main-Class automatiquement.
  • Erreur de nommage — par exemple, vous avez écrit main en minuscules ou oublié de spécifier le package.
  • Encodage et formatage — dans le manifeste, chaque ligne vide à la fin du fichier est importante.


Comment créer un fichier JAR exécutable : trois méthodes



Méthode 1. Ligne de commande (contrôle manuel)



Cette méthode donne une compréhension complète du processus. Supposons que nous ayons une classe simple HelloWorld.java :



package com.example;

public class HelloWorld { public static void main(String[] args) { System.out.println("Bonjour le monde ! Le JAR fonctionne !"); }}


Étape 1. Compiler la classe

javac -d . HelloWorld.java

Le drapeau -d . crée la structure des packages (com/example/HelloWorld.class).



Étape 2. Créer le manifeste manuellement

Créez un fichier MANIFEST.MF (par exemple, dans le Bloc-notes) avec le contenu suivant :

Manifest-Version: 1.0Main-Class: com.example.HelloWorld

Important : après la dernière ligne, il doit obligatoirement y avoir une ligne vide ! Sans cela, le fichier JAR pourrait ne pas lire le manifeste.



Étape 3. Créer le JAR

jar cfm HelloWorld.jar MANIFEST.MF com/example/HelloWorld.class

Le drapeau

Blogs

Book Recommendations