IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Eclipse Java Discussion :

Créer un fichier .jar exécutable avec Eclipse


Sujet :

Eclipse Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2006
    Messages : 147
    Points : 120
    Points
    120
    Par défaut Créer un fichier .jar exécutable avec Eclipse
    Bonsoir,

    Je pense que, à peine lu le titre vous vous dites déjà, encore un crétin qui ne sait pas utiliser la fonction rechercher.

    Oui, je sais que cette question revient souvent.
    Oui, je sais qu'il existe bon nombre de tutorial/FAQ qui répondent à cette question.

    Mais voilà, je débute, et malgré la bonne 30aine de posts/FAQ/Tutos que j'ai lu, je n'arrive tout simplement pas à créer mon fichier .jar exécutable.
    Et il me semble que je ne suis pas le seul. Ca à l'air d'être tellement facile que les réponses ne sont jamais assez détaillées pour des débutant (comme moi (surtout moi)).

    J'aimerais que quelqu'un se prenne le temps de m'expliquer clairement, avec des termes français (pas des trucs du monde Java) comment je peux faire pour créer mon .jar avec Eclipse.

    J'ai réussi à en faire un, mais quand je veux le lancer il me dit "Could not find the main class. Program will exit".

    Pour l'instant, les seuls trucs que j'ai compris, c'est qu'il existe un assistant. J'ai aussi vaguement compris l'astuce du fichier manifest (en tout cas qu'il en faut un, c'est déjà ça).

    Quels fichiers/packages/classes je dois inclure ? Quels paramètres ? Dites-vous que je pars de zéro et que je suis vraiment une bille en Java.

    Pour information, j'utilise un API donc il faut me dire comment l'inclure aussi.

    Je sais que c'est lourd mais je remercie d'avance celui qui se dévouera. MERCI

    EDIT: Ou si vous avez un tutorial qui explique extrêmement bien avec des images et des shémas et des termes non-Java je veux bien

    p.s: Je ne reviens que lundi prochain, alors n'attendez pas trop vite ma réaction.
    Il y a 10 types de personnes, celles qui connaissent le binaire, et les autres...

  2. #2
    Membre éprouvé Avatar de MarneusCalgarXP
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    911
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 911
    Points : 1 118
    Points
    1 118
    Par défaut
    Tout ce que je peux te dire, c'est qu'il existe un plugin nommé Fat Jar qui se charge de tout inclure, et il y a un tutoriel sur le site pour expliquer le fonctionnement, avec des images !

    Je ne répond à aucune question technique par MP.

    Si votre problème est réglé, n'oubliez pas Dans tous les cas

  3. #3
    Membre confirmé Avatar de menuge
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    727
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2004
    Messages : 727
    Points : 616
    Points
    616
    Par défaut
    J'ai réussi à en faire un, mais quand je veux le lancer il me dit "Could not find the main class. Program will exit".
    Ici, il t'indique qu'il n'arrive pas à trouver le point d'entrée de ton application (en l'occurence la classe contenant la méthode main).
    Avec Eclipse, lorsque tu fais ton .jar via l'interface graphique, il y a un champ à remplir (grace à un bouton qui te fait la recherche automatique) pour lui indiquer la main class. En fait, cette partie ne fait que remplir le fichier Manifest.

    Si tu as des dépendances vers d'autres jar, Eclipse ne met pas à jour le Class-Path de ton fichier Manifest. Il faut donc l'jouter à la main dans le manifest.

    N'hésite pas si tu as d'autres questions
    --
    Ludovic

  4. #4
    Membre habitué Avatar de benjiprog
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2005
    Messages
    302
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2005
    Messages : 302
    Points : 134
    Points
    134
    Par défaut
    Pour créer un fichier .jar il faut que dans le package explorer ou tu voit ton projet, tes classes etc(a gauche)... fait un clique droit choisi Export ensuite tu double clique sur JAR file. Dans la nouvelle fenêtre tu choisi dans quel dossier sera ranger ton .jar (Select the export destination) puis clique dans la petite case a coté du nom de ton projet (Select the ressource to export). Ensuite clique 2 fois sur next puis tout en bas de cette dernière fenêtre il y a ecrit (mon eclipse est en anglais):
    Select the class of the application entry point
    donc tu clique sur le bouton Browse pour selectionner le fichier qui contient ton code avec la méthode main, fait attention a bien choisir celui ou il y la méthode main (public static void main (String args[]).
    Et normalement ton fichier .jar devrais se trouver dans le dossier que tu as choisi auparavant. Voilà j'éspère avoir été assez clair.
    Les élèves glandeurs c'est comme le linge, quand il fait beau ca sèche.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2006
    Messages : 147
    Points : 120
    Points
    120
    Par défaut
    Bonjour,

    Merci pour vos réponses. En fait à force de ne pas réussir, j'ai pensé que c'était bien plus compliqué, mais c'est effectivement tout simple.

    J'ai bien suivi les opération que vous m'avez décrites, mais il me fait toujours la même erreur.

    Je lui dit que ma classe principale est xmlBuilder.xmlBuilder. Dans cette classe se trouve une méthode main:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public static void main(String[] args){
         xmlBuilder gui = new xmlBuilder();
         gui.setVisible(true);
    }
    Dans mon manifest, j'ai ceci :

    Manifest-Version: 1.0
    Main-Class: xmlBuilder.xmlBuilder
    Voilà si vous avez une idée d'ou ca viens.

    Si tu as des dépendances vers d'autres jar, Eclipse ne met pas à jour le Class-Path de ton fichier Manifest. Il faut donc l'jouter à la main dans le manifest.
    Ok ca marche.... Et comment on fait ca ?
    Il y a 10 types de personnes, celles qui connaissent le binaire, et les autres...

  6. #6
    Membre averti Avatar de dazz_x
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    269
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2006
    Messages : 269
    Points : 328
    Points
    328
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Class-Path: .\libsrep\lib1.jar .\libsrep\lib2.jar
    En gros, ce que je fais c'est copier tous les .class avec leur arborescence dans un nouveau dossier (c'est ce que fait l'export d'Eclipse si on coche l'option "Exporter les fichiers classes et les ressources générées"). A la racine de ce dossier, je crée un répertoire META-INF dans lequel je mets le fichier MANIFEST.MF. Ce fichier, tu dois déjà l'avoir à ce que je vois, il faut ajouter la ligne que je t'ai indiqué si tu as des librairies à ajouter, puis tu termines par une ligne vide.
    Ensuite, toujours à la racine du gros répertoire tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    jar -cvfm MonAppli.jar META-INF/MANIFEST.MF .  //ne pas oublier le "."
    et là il te crée le jar qui doit se lancer tout seul quand tu cliques dessus...
    C'est ce qui est expliqué dans la FAQ

    voili
    La différence entre la théorie et la pratique est plus mince en théorie qu'en pratique

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2006
    Messages : 147
    Points : 120
    Points
    120
    Par défaut
    J'ai essayé avec la technique manuelle.

    Ça me renvoie l'erreur suivante ;

    Exception in thread "main" java.lang.NoClassDefFoundError: cvfm
    J'ai fait un dossier /xmlBuilder

    Dans ce dossier, j'ai placer les fichiers suivants :

    \xmlBuilder\FiltreExplorateur.class
    \xmlBuilder\META-INF
    \xmlBuilder\META-INF\MANIFEST.MF
    \xmlBuilder\upcast.jar
    \xmlBuilder\upcast.license
    \xmlBuilder\xmlBuilder$1.class
    \xmlBuilder\xmlBuilder.class

    Mon fichier manifest se présente comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     Manifest-Version: 1.0
    Main-Class: xmlBuilder
    Class-Path: .\upcast.jar .\upcast.jar
    Ensuite je vais dans la console, je me place dans mon dossier xmlBuilder et j'exécute la commande suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    jar cvfm xmlBuilder.jar META-INF/MANIFEST.MF .
    Et la il m'affiche l'erreur.
    Il y a 10 types de personnes, celles qui connaissent le binaire, et les autres...

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2006
    Messages : 147
    Points : 120
    Points
    120
    Par défaut
    En fait je crois que le problème se situe au niveau du jar externe que j'utilise.

    Eclipse ne l'inclut pas avec le jar.

    Vous savez comment je peut faire ?
    Il y a 10 types de personnes, celles qui connaissent le binaire, et les autres...

  9. #9
    Membre averti Avatar de dazz_x
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    269
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2006
    Messages : 269
    Points : 328
    Points
    328
    Par défaut
    si tu veux pas trop t'embêter, tu crées dans ton projet sous Eclipse un répertoire "libs" et tu y copies les jar que tu utilises... Comme çà elles seront incluses dans ton jar ! (et dans le classpath tu auras, ./libs/malib.jar)
    La différence entre la théorie et la pratique est plus mince en théorie qu'en pratique

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2006
    Messages : 147
    Points : 120
    Points
    120
    Par défaut
    si tu veux pas trop t'embêter, tu crées dans ton projet sous Eclipse un répertoire "libs" et tu y copies les jar que tu utilises... Comme çà elles seront incluses dans ton jar ! (et dans le classpath tu auras, ./libs/malib.jar)
    Merci pour l'astuce, ça simplifie un peu.

    J'ai retenté plusieurs fois manuellement et j'arrive un peu plus loin.

    Lorsque je tente a présent de créer le .jar depuis la console, il m'affiche cette erreur-ci.

    java.io.IOException: misplaced continuation line
    at java.util.jar.Attributes.read(Attributes.java:374)
    at java.util.jar.Manifest.read(Manifest.java:167)
    at java.util.jar.Manifest.<init>(Manifest.java:52)
    at sun.tools.jar.Main.run(Main.java:123)
    at sun.tools.jar.Main.main(Main.java:903)
    Le truc c'est que je vois pas du tout ce que ça veut dire, j'ai pas 167 ligne a mon fichier manifest .
    Il y a 10 types de personnes, celles qui connaissent le binaire, et les autres...

  11. #11
    Membre averti Avatar de dazz_x
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    269
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2006
    Messages : 269
    Points : 328
    Points
    328
    Par défaut
    c'est pas la ligne de l'erreur de ton fichier manifest, c'est la ligne de code du fichier de l'utilitaire jar de Sun où est levée l'exception....

    Ton Manifest n'est pas correctement formé, il me semble...
    Il faut bien penser à laisser une ligne vide à la fin !!
    La différence entre la théorie et la pratique est plus mince en théorie qu'en pratique

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2006
    Messages : 147
    Points : 120
    Points
    120
    Par défaut
    Hu ! J'ai honte, j'ai mis accidentellement un espace en trop devant une ligne.

    Ok il m'a fait mon fichier jar, mais quand je veut l'exécuter il me dit : "Could not find the main class. Programm will exit."

    Dans mon fichier manifest j'ai mis : "Main-Class: xmlBuilder.xmlBuilder"

    Et il y a une méthode "public static void main(String[] args)" dans cette classe.
    Il y a 10 types de personnes, celles qui connaissent le binaire, et les autres...

  13. #13
    Membre averti Avatar de dazz_x
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    269
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2006
    Messages : 269
    Points : 328
    Points
    328
    Par défaut
    Dans l'arborescence que tu as indiqué précédemment :
    \xmlBuilder\FiltreExplorateur.class
    \xmlBuilder\META-INF
    \xmlBuilder\META-INF\MANIFEST.MF
    \xmlBuilder\upcast.jar
    \xmlBuilder\upcast.license
    \xmlBuilder\xmlBuilder$1.class
    \xmlBuilder\xmlBuilder.class
    tu es dans un répertoire xmlBuilder et tu fais le jar. Or dans le manifest, tu dois lui indiquer par rapport à la racine quel est le chemin de ton main. Ici, si ton main est dans xmlBuilder.class, ça veut dire que ta classe de main doit être xmlBuilder, et non xmlBuilder.xmlBuilder. Si dans ton appli tu as fait un package xmlBuilder, alors tu dois créer un autre répertoire genre TestJar :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    TestJar- |
                |META-INF
                |xmlBuilder
                |libs
    et faire le jar à partir de TestJar
    Il faut que l'arborescence soit la même que ton projet Eclipse ! (Exemple, tu copies tout ton répertoire de projet Eclipse en enlevant tous les fichiers qui ne servent à rien gren .classpath,.project,... et en rajoutant le répertoire META-INF avec ton manifest [Je sais que c'est pas beau !!! mais ça doit fonctionner])
    La différence entre la théorie et la pratique est plus mince en théorie qu'en pratique

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2006
    Messages : 147
    Points : 120
    Points
    120
    Par défaut
    Ah oki je vois. En fait le META-INF doit se placer dans le répertoire du projet et non pas dans le répertoire du package.

    Ça marche. Merci beaucoup dazz_x pour ta ténacité ^^.
    Il y a 10 types de personnes, celles qui connaissent le binaire, et les autres...

  15. #15
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2006
    Messages : 147
    Points : 120
    Points
    120
    Par défaut
    Encore une chose. Le .jar a-t-il besoin des autres fichiers pour fonctionner ?
    Si oui, comment peut on faire pour les inclure au jar et n'avoir plus qu'un seul fichier à transporter. Est-ce possible ?
    Il y a 10 types de personnes, celles qui connaissent le binaire, et les autres...

  16. #16
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2006
    Messages : 147
    Points : 120
    Points
    120
    Par défaut
    En fait il n'a pas besoin de tous les fichiers mais juste de l'autre fichier jar que j'utilise. Puis-je intégrer ses méthodes que j'utilise dans mon jar ?
    Il y a 10 types de personnes, celles qui connaissent le binaire, et les autres...

  17. #17
    Membre éprouvé Avatar de MarneusCalgarXP
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    911
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 911
    Points : 1 118
    Points
    1 118
    Par défaut
    Est ce que le plugin fat jar ne fait pas ca ? (voir ma réponse, la 1° de ce topic)

    Je ne répond à aucune question technique par MP.

    Si votre problème est réglé, n'oubliez pas Dans tous les cas

  18. #18
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2006
    Messages : 147
    Points : 120
    Points
    120
    Par défaut
    Pour l'instant j'ai un peu de peine a faire fonctionner Fat Jar, il fait planter tout le programme.
    Il y a 10 types de personnes, celles qui connaissent le binaire, et les autres...

  19. #19
    Membre averti Avatar de dazz_x
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    269
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2006
    Messages : 269
    Points : 328
    Points
    328
    Par défaut
    tu crées un répertoire libs dans lequel tu copies ton jar, et tu rajoute celui-ci au classpath dans ton manifest ./libs/monjar.jar
    La différence entre la théorie et la pratique est plus mince en théorie qu'en pratique

  20. #20
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2006
    Messages : 147
    Points : 120
    Points
    120
    Par défaut
    Ouais c'est ce que j'ai fait mais il ne l'inclut pas dans mon jar. Je suis obligé de toujours garder le dossier libs avec mon jar pour l'exécuter.

    Je suis en train de compiler avec fatjar, on verra si ça marche.
    Il y a 10 types de personnes, celles qui connaissent le binaire, et les autres...

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. JMF Jar exécutable avec Eclipse
    Par math11 dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 11/04/2012, 11h53
  2. Créer un fichier jar exécutable
    Par M_Ostrogradsky dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 24/08/2010, 10h13
  3. Exporter en un fichier jar exécutable avec des ressources
    Par Marvelll dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 04/06/2010, 14h38
  4. Créer un jar exécutable avec Eclipse
    Par rolls dans le forum Eclipse Java
    Réponses: 9
    Dernier message: 07/12/2009, 10h16
  5. Réponses: 3
    Dernier message: 23/12/2008, 12h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo