Executable Java

Résolu
Bonjour,

Qui peut me donner une explication simple ou une bonne adresse ou je peux en trouver une bonne marche à suivre pour créer un executable en java.

Merci d'avance.

Hélène

Hélène

25 réponses

Résumé de la discussion

Pour créer un exécutable Java, la problématique centrale porte sur la définition de la classe principale et du manifest Main-Class dans l’archive jar afin d’exécuter correctement l’application. Des solutions expliquent comment éviter l’erreur « Failed to load Main-Class manifest attribute ... » en utilisant soit la ligne Main-Class dans le manifest, soit la commande java -cp <jar> <classe principale="">. Pour cette étape, il est courant de créer un fichier manifest.txt avec Main-Class puis de compiler l’archive jar en incluant le manifest, ou d’employer une approche via jar -cfe et chmod +x. D’autres remarques précisent que sous Windows, double‑clic ou un fichier .bat peut lancer l’exécutable, tandis que Linux nécessite des permissions d’exécution et des instructions explicites pour démarrer la JVM.</classe></jar>

Bobot (l’IA à votre service)
  1. 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.
    33
    1. pour une fois que CCM ne servent pas qu'a recueillir les pleures de noobs infoutus d'utiliser google...

      Merci mille fois PhiLho pour ta solution, j'avais le même pb que toi et c'est bien le "-jar" qui me posait pb.

      java -cp <NomDeMonJar>.jar <nom.des.packages.et.sous.package.separes.par.des.points>.<NomClassMain>

      java -cp monjar.jar eu.societe.batch.Start

      Notez l'absence de ".class" en fin de ligne.
      0
    2. Dans eclipse à l'export suffit de lui indiquer la MainClass monpackage.laclasse.
      0
    3. expliquer plus comprensiblement
      0
    4. Merci, ça marche nickel
      0
    5. Le package, c'est le nom du fichier jar c'est ça ?
      et la classe, c'est quoi ?
      0
  2. moi ausi j'ai le même problème mais essaye une recherche sur google "InstallAnywhere" bonne chance !
    1
    1. Bonsoir,
      Il suffit de créer une archive (.jar) exécutable.
      a+
      3
      1. Ok, C'est fait, mais que dois-je faire après.
        D'après ce que j'ai compris, il faut télécharger la JDK, faire un document MANIFEST et un fichier bat.
        Cependant, tous les exemples que je possède ne sont pas très explicite, je souhaite trouver un document qui me donnerait une marche à suivre facile à comprende.

        Merci de votre aide.
        Bonne année
        2
        1. Bonsoir,
          En gros, il faut créer un fichier manifest.txt contenant la ligne:
          Main-Class: classePrincipale

          Puis créer l'archive .jar sans oublier l'option pour l'inclusion du fichier manifest (cf jar -help), puis chmod +x monFichier.jar (sous linux)
          Voilà l'exécutable est créé, pour l'exécuter:
          ./monFichier.jar
          Sous win, on peut cliquer directement sur le fichier .jar ou on crée un fichier .bat contenant la ligne:
          java monFichier.jar
          Toute la documentation est reprise de façon fort complète sur:
          http://java.sun.com/docs/books/tutorial/jar/index.html
          a+
          3
          1. Merci Philtrain,

            cependant, en cliquant sur le fichier jar, j'ai une boite de dialogue qui dit que "Windows ne peut pas ouvrir le fichier car il doit connaître le programme utilisé pour sa création".

            Est-ce parce que je doit obligatoirement avoir la JRE ?.

            Merci d'avance pour ta réponse et je te souhaite une bonne année 2004.
            1
            1. Bonjour Hélène,
              Effectivement, pour lancer un programme java, il faut que la machine virtuelle java soit installée. On peut la télécharger gratuitement sur http://www.java.sun.com

              Merci pour tes bons voeux et à toi aussi je te souhaite une bonne année 2004
              a+
              0
              1. Hello, j'ai encore un peu besoin de ton aide.

                La jre est installée, j'ai créer mon fichier jar, j'ai complété le fichier manifest, cependant, maintenant j'ai un message qui dit :
                "Failed to load Main-Class manifest attribute from F:\Test\Test.jar

                Pourrais-tu encore un fois éclairer ma lanterne.

                Merci d'avance et bonne fin de journée.
                0
            2. Bonjour,
              cette erreur provient vraissemblablement du fait que la classe principale n'est pas bien spécifiée dans le fichier manifest.txt. Il faut veiller à bien écrire:
              Main-Class: [package].[sous-package].classePrincipale

              - package est le nom du package contenant la classe principale,
              - sous-package est le nom du sous-package éventuel contenant la classe principale
              - classePrincipale est le nom de la classe principale sans l'extension .class
              1
              1. Victoire !

                Tout fonctionne, encore merci.

                A Bientot
                0
            3. Merci Philitrain de répondre à mes questions, je t'en suis vraiment reconnaissante.

              Je vais essayer de modifier mon fichier MANIFEST.
              Cependant, chaque fois que je modifie quelque chose dans ce dernier et que j'execute l'application le fichier MANIFEST ce vide.
              C'est rageant.

              Amitiés.
              0
              1. vous pouvez aussi utiliser javaw livre avec le sdk
                dans votre fichier de commande (.bat) vous mettez plutot la commnde
                javaw -jar monFichier.jar
                ca a pour effet de lancer l execution sans afficher 1 fenetre msdos
                ie votre application est lancee en arriereplan
                -1
                1. Salut Rameur,

                  J'ai essayer ton conseil. Cependant, la fenêtre MSDos est restée ouverte.
                  Connais-tu une commande qui puisse la fermer.

                  Merci d'avance et bonne fin de soirée
                  0
                2. @HélèneSalut , je ne sais pas si je tombe sur la bonne personne à qui je voudrais demander tas d'explication dans le domaine de l'informatique de gestion comme ça été ma spécialité de diplôme universitaire depuis 3 ans, et c'est la raison pour la quelle j'aurais besoin d'aide de votre part pour bien me retrouver à nouveau au bout de ma formation et reprendre les base de la programmation sachant que j'avais soutenu ma mémoire avec le language delphi...
                  Bref, si ça vous nuit pas je vous serai reconnaissant et je site à l'occasion que je suis professionnel dans le domaine audiovisuel à titre de monteur virtuel et si vous.
                  Je suis d'avantage ravi de vous écrire et je souhaite approfondir mes connaissence sous votre patronnage chère Hélene :).

                  A plutard
                  Merci (Blitzkrieg)
                  0
              2. bonjour
                qui peut m'aider pour faire une transmission d'un caractere d'un pc à une caisse enregistreuse a travers le port serie RS-232 en utilisant un programme en java.
                merci
                0
                1. bonjour
                  qui peut m'aider pour faire une transmission d'un caractere d'un pc à une caisse enregistreuse a travers le port serie RS-232 en utilisant un programme en java.
                  merci
                  0
                  1. bonjour,
                    qui peut m'aider pour faire une communication reseux entre pc et une caisse enregistreuse uniwell en utilisant la programmation java.
                    merci d'avance
                    0
                    1. Ca reste quand meme du bytecode!!
                      mais pour generer du code machine avec java il ya gcj mais c pas encore top top
                      0
                      1. Bonsoir bolosse,
                        Il ne faut pas oublier qu'un des intérêts de java est d'être un langage multi-plateforme. Archiver ses classes dans un jar exécutable permet justement de le faire fonctionner sur plusieurs OS, à condition bien sûr que la jvm soit installée.
                        a+
                        0
                    2. bonjour bolosse,
                      si vous avez une idee expliquez mois d'avantage .
                      merci.
                      0
                      1. salut phltrain,
                        merci de m'avoir répondre jai contacté le cite et c'est facile à suivre .j'aimerais s'avoir comment utiliser ça pour faire communiquer un pc et une caisse enregistreuseen reseaux surtout que je connais pas bient la programmationt java .
                        merci de votre aide.
                        0
                        1. salut phltrain,
                          merci de m'avoir répondre jai contacté le cite et c'est facile à suivre .j'aimerais s'avoir comment utiliser ça pour faire communiquer un pc et une caisse enregistreuse en reseaux surtout que je ne connais pas bient la programmationt java .
                          merci de votre aide.
                          0
                          1. Plz help

                            I execute my Test.jar then error display

                            Failed to load Main-Class manifest attribute from c:\PDA\Test\dist\Test.jar

                            Plz give me solution of this error

                            Thank you
                            1
                            1. Bonjour à tous,
                              je suis novice dans les web services et j'ai besoin d'utiliser des .jar mais quand je clique dessus, il me dit comme probleme "Failed to load Main-Class manifest attribute from nom_dossier" mais pourtant ce sont des .jar de axis que je prends juste, j'ai aussi déja installé le JRE 6 de java.

                              Pourriez vous me dire ce que je dois faire pour résoudre ce problème?
                              Merci beaucoup
                              0
                              • 1
                              • 2