Partage
  • Partager sur Facebook
  • Partager sur Twitter

Fichier jar

Ne se lance pas

    1 février 2023 à 18:24:13

    Bonjour

    j'ai un problème quand je crée un fichier jar sous eclipse, lorsque j'essaie de l'executer en double cliquant dessus il ne se lance pas. Lorsque j'essaie de l'executer en ligne de commande il me donne l'exception ClassNotFound: jeu,  alors que lors de la création du fichier j'ai bien spécifié la classe à créer.

    Merci d'avance pour toute aide

    • Partager sur Facebook
    • Partager sur Twitter
      13 février 2023 à 21:36:14

      Bonjour,

      je suis noob en java, mais j'ais vite appris que un exécutable java était un fichier .class et pas .jar ; et que les fichier .jar étaient un peu les dll de java. Donc pas exécutables.

      -
      Edité par GillesMessager 13 février 2023 à 21:37:06

      • Partager sur Facebook
      • Partager sur Twitter
        14 février 2023 à 10:49:44

        Un .class est tout simplement un .java qui a ete compile en bytecode par javac, ni plus ni moins.

        Un .jar quant a lui est juste une archive de type zip avec une autre extension, jar (Java ARchive).

        L'executable est ailleurs, c'est l'application java qui se trouve dans votre JRE (java.exe ou java suivant l'OS).

        Les commandes pour executer une application java sont donc 'java' suivi de parametres: 'java nom de la classe avec le main' pour un .class, 'java -jar nom du jar' pour un jar(le jar devra contenir un manifeste pour que java puisse detecter la fonction main a utiliser).

        Double cliquer sur le jar sans resultat est tres probablement que java n'est pas associe a l'extension .jar dans le systeme d'exploitation.

        Avoir un class not found necessite probablement d'ajouter le parametre -cp pour specifier les classes additionelles a inclure.

        https://docs.oracle.com/en/java/javase/17/docs/specs/man/java.html

        • Partager sur Facebook
        • Partager sur Twitter
          20 février 2023 à 9:55:28

          Pendant qu'on y est : un jar contient aussi les ressources (par exemples icones) qui vont avec.

          Exemple simple : voila un programme qui affiche le contenu d'un fichier.txt livré dans le jar

          package lectureressource;
          
          import java.io.InputStream;
          import java.util.Scanner;
          
          public class LectureRessource {
          
              public static void main(String[] args) {
                  InputStream stream = LectureRessource.class.getResourceAsStream("fichier.txt");
                  Scanner scanner = new Scanner(stream);
                  String message = scanner.nextLine();
                  System.out.println("message = " + message);
              }
              
          }
          


          Le fichier contient une ligne "hello world", peu importe.

          Voila ce qu'il y a dans le jar

          $ jar -tvf dist/LectureRessource.jar 
               0 Sun Jul 04 22:51:26 CEST 2021 META-INF/
             231 Sun Jul 04 22:51:24 CEST 2021 META-INF/MANIFEST.MF
               0 Sun Jul 04 22:51:26 CEST 2021 lectureressource/
            1407 Sun Jul 04 22:51:26 CEST 2021 lectureressource/LectureRessource.class
              13 Sun Jul 04 22:51:26 CEST 2021 lectureressource/fichier.txt
          


          Pour faire exécuter

          $ java -jar dist/LectureRessource.jar 
          message = hello, world
          

          Techniquement les fichiers .class ne sont pas des exécutables, mais du "bytecode" qui est chargé, éventuellement traduit ou interprété, par la commande java (qui elle, est un exécutable)

          $ file /usr/lib/jvm/java-17-openjdk-amd64/bin/java
          /usr/lib/jvm/java-17-openjdk-amd64/bin/java: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=982fef4c8011c4a9cf5ce0047abaf058a02bf451, for GNU/Linux 3.2.0, stripped
          



          Si on extrait le META-INF/MANIFEST.MF, on y trouve

          Manifest-Version: 1.0
          Ant-Version: Apache Ant 1.10.4
          Created-By: 11.0.11+9-post-Debian-1deb10u1 (Debian)
          Class-Path: 
          X-COMMENT: Main-Class will be added automatically by build
          Main-Class: lectureressource.LectureRessource
          
          

          qui indique la classe dont le main sera (par défaut) lancé à l'exécution.




          -
          Edité par michelbillaud 20 février 2023 à 9:58:43

          • Partager sur Facebook
          • Partager sur Twitter

          Fichier jar

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown