Problème lors de la création d'une archive .jar exécutable
Résolu
Keivan
-
Keivan -
Keivan -
Bonjour,
C'est la première fois que je pose une question sur un forum, donc je ne suis pas sûr de bien m'y prendre, mais voilà mon soucis :
J'ai fait un programme en java et je l'ai exporté en .jar ("Runnable Jar File").
Mais ce .jar n'est exécutable que sur mon ordinateur, car sur les autres ordinateurs, le message suivant apparaît : "Could not find the main class : Main.Main. Program will exist".
Donc je me suis renseigné et j'ai vu qu'il fallait créer soi-même l'archive .jar avec un fichier Manifest.mf rempli comme il faut.
Le problème c'est que je ne sais pas trop ce que je dois mettre dans ce manifest, ni comment agencer mon dossier que je veux compresser.
Ce que j'ai fait (et qui ne marche pas) :
J'ai un dossier "Projet" avec dedans toutes mes classes *.class, mon fichier MANIFEST.MF que j'ai rempli un peu au hasard...
Je lance la commande "jar cvmf MANIFEST.MF Programme.jar *.class" , ça me crée Programme.jar, mais quand je le lance (je ne peux le faire que via la console, je ne sais pas pourquoi), ça me dit "Impossible de trouver ou charger la classe principale : Main.class".
Quelqu'un sait-il comment on crée une telle archive ou peut-il me donner des conseils ?
Merci d'avance pour votre aide ! :)
Keivan
Pour info, j'ai mis le texte suivant dans mon Manifest :
Main-Class: Main.class
Class-Path: C:\Program Files\Java\jre1.8.0_91\bin
C'est la première fois que je pose une question sur un forum, donc je ne suis pas sûr de bien m'y prendre, mais voilà mon soucis :
J'ai fait un programme en java et je l'ai exporté en .jar ("Runnable Jar File").
Mais ce .jar n'est exécutable que sur mon ordinateur, car sur les autres ordinateurs, le message suivant apparaît : "Could not find the main class : Main.Main. Program will exist".
Donc je me suis renseigné et j'ai vu qu'il fallait créer soi-même l'archive .jar avec un fichier Manifest.mf rempli comme il faut.
Le problème c'est que je ne sais pas trop ce que je dois mettre dans ce manifest, ni comment agencer mon dossier que je veux compresser.
Ce que j'ai fait (et qui ne marche pas) :
J'ai un dossier "Projet" avec dedans toutes mes classes *.class, mon fichier MANIFEST.MF que j'ai rempli un peu au hasard...
Je lance la commande "jar cvmf MANIFEST.MF Programme.jar *.class" , ça me crée Programme.jar, mais quand je le lance (je ne peux le faire que via la console, je ne sais pas pourquoi), ça me dit "Impossible de trouver ou charger la classe principale : Main.class".
Quelqu'un sait-il comment on crée une telle archive ou peut-il me donner des conseils ?
Merci d'avance pour votre aide ! :)
Keivan
Pour info, j'ai mis le texte suivant dans mon Manifest :
Main-Class: Main.class
Class-Path: C:\Program Files\Java\jre1.8.0_91\bin
A voir également:
- Problème lors de la création d'une archive .jar exécutable
- Creation de compte google - Guide
- Creation de site web - Guide
- Creation compte gmail - Guide
- Media creation tool - Télécharger - Systèmes d'exploitation
- Télécharger jeux java jar - Télécharger - Jeux vidéo
2 réponses
Bonjour,
Enlèves la ligne Class-Path ainsi que l'extension .class dans Main-Class
Ne pas oublier de terminer par une ligne vide :
Remarque : normalement il doit aussi y avoir le Manifest-Version mais cvmf va sûrement le rajouter tout seul (à vérifier dans le contenu du jar créé)
Enlèves la ligne Class-Path ainsi que l'extension .class dans Main-Class
Ne pas oublier de terminer par une ligne vide :
Main-Class: Main
Remarque : normalement il doit aussi y avoir le Manifest-Version mais cvmf va sûrement le rajouter tout seul (à vérifier dans le contenu du jar créé)
Bonjour
Oui, il y avait ça comme problème, mais aussi le fait que j'avais que mis *.class et pas les autres dossiers des autres packages et donc toutes les classes n'étaient pas prises.
Du coup le programme se lance presque parfaitement : il n'arrive pas à récuperer les librairies dont il a besoin (ce sont des librairies particulières qui ne sont pas les librairies de java par défaut).
Sais tu comment je dois indiquer dans le manifeste (ou autre ) le chemin de ces librairies ?
Merci beaucoup pour ton aide KX ! :)
Oui, il y avait ça comme problème, mais aussi le fait que j'avais que mis *.class et pas les autres dossiers des autres packages et donc toutes les classes n'étaient pas prises.
Du coup le programme se lance presque parfaitement : il n'arrive pas à récuperer les librairies dont il a besoin (ce sont des librairies particulières qui ne sont pas les librairies de java par défaut).
Sais tu comment je dois indiquer dans le manifeste (ou autre ) le chemin de ces librairies ?
Merci beaucoup pour ton aide KX ! :)
Il faut mettre ces librairies dans un dossier à côté et y faire référence en chemin relatif avec la valeur Class-Path
Exemple :
Remarque : avec une configuration Maven de ton projet tu n'aurais pas tout ces problèmes de création de Manifest à la main. Voir : Débuter avec Maven
Exemple :
C:\MonDossier\monJar.jar
C:\MonDossier\lib\maLibrairie1.jar
C:\MonDossier\lib\maLibrairie2.jar
Class-Path: lib/maLibrairie1.jar lib/maLibrairie2.jar
Remarque : avec une configuration Maven de ton projet tu n'aurais pas tout ces problèmes de création de Manifest à la main. Voir : Débuter avec Maven
Class-Path: lib/ cela devrait fonctionner je pense, mais toujours pareil, ne pas oublier la ligne vide à la fin, sinon ça ne prend pas en compte la dernière ligne
Et non, SVN c'est pour sauvegarder les différentes versions de ton code.
Maven c'est un utilitaire qui permet de compiler, générer des packages, gérer les jars de dépendances, etc.
Et non, SVN c'est pour sauvegarder les différentes versions de ton code.
Maven c'est un utilitaire qui permet de compiler, générer des packages, gérer les jars de dépendances, etc.
Ok j'ai normalement le bon fichier Manifest.mf, mais il n'arrive pas à trouver les librairies...
Le message d'erreur est le suivant :
EDIT : Bon ça marche nickel si je mets pas les librairies dans un sous-dossier lib. C'est un peu moins organisé du coup, mais tant que ça marche... ;) Merci pour l'aide du coup !!
Le message d'erreur est le suivant :
Exception in thread (...) java.lang.NoClassDefFoundError: org/jfree/data/xy/XYDataset
EDIT : Bon ça marche nickel si je mets pas les librairies dans un sous-dossier lib. C'est un peu moins organisé du coup, mais tant que ça marche... ;) Merci pour l'aide du coup !!