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

Java Discussion :

Créer JAR exécutable


Sujet :

Java

  1. #1
    Membre éclairé

    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    788
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 788
    Par défaut Créer JAR exécutable
    Bonjour j'ai un problème pour créer un jar exécutable , il ne trouve pas ma classe main

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Exception in thread "main" java.lang.NoClassDefFoundError: main 
    Caused by: java.lang.ClassNotFoundException: main 
    	at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
    	at java.security.AccessController.doPrivileged(Native Method)
    	at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
    	at java.lang.ClassLoader.loadClass(ClassLoader.java:323)
    	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
    	at java.lang.ClassLoader.loadClass(ClassLoader.java:268)
    	at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:336)
    Could not find the main class: main . Program will exit.
    Donc j'ai un dossier jar ou j'ai tous les .class + META-INF/MANIFEST.MF qui contient

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Manifest-Version: 1.0 
    Created-By: 1.4.1_01 (Sun Microsystems Inc.) 
    Main-Class: main 
    Class-Path: ./lib/commons-httpclient-3.1/commons-httpclient-3.1.jar ./lib/commons-logging-1.1.1/commons-logging-1.1.1.jar ./lib/commons-codec-1.3/commons-codec-1.3.jar
    Et ma classe main c'est bien : main.class qui se trouve dans mon dossier jar

    VOilà merci de votre aide !!

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Met ta classe "main" dans un package. Et au passage, les noms de classes devraient commencer par une majuscule en java (question de convention)

  3. #3
    Membre éclairé

    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    788
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 788
    Par défaut re
    Ok j'ai mis la première lettre en maj....
    J'ai mis toutes mes classe dans un package.

    Mais j'ai la même erreur.

    Que faire ?

    Merci

  4. #4
    Rédacteur
    Avatar de benwit
    Profil pro
    dev
    Inscrit en
    Septembre 2004
    Messages
    1 676
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : dev

    Informations forums :
    Inscription : Septembre 2004
    Messages : 1 676
    Par défaut
    Si tu as mis ta classe "Main" dans un package "ton.package",
    as tu aussi modifié le manifest :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Main-Class: ton.package.Main
    Sinon autre question, as tu cette arboresence (à adapter avec ton.package à toi) ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    jar/
       ton/
          package/
             Main.class
             AutreClass.class
     
    lib/
       commons-httpclient-3.1/
           commons-httpclient-3.1.jar 
       commons-logging-1.1.1/
           commons-logging-1.1.1.jar 
       commons-codec-1.3/
           commons-codec-1.3.jar

    Pour info :
    http://java.sun.com/docs/books/tutor...r/downman.html

  5. #5
    Membre éclairé

    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    788
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 788
    Par défaut re
    Oui j'ai bien modifié pour le package mais toujours la même erreur !!

    Sinon mon arbre c'est

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    jar/
       ton/
          package/
             Main.class
             AutreClass.class
     
        lib/
         commons-httpclient-3.1/
             commons-httpclient-3.1.jar 
         commons-logging-1.1.1/
             commons-logging-1.1.1.jar 
         commons-codec-1.3/
             commons-codec-1.3.jar
    Bizarre

  6. #6
    Rédacteur
    Avatar de CyberChouan
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 752
    Par défaut
    Tu ne peux pas intégrer comme tu le fais les librairies de ton jar dans le jar lui-même. Tu dois revenir à une arborescence telle que décrite par benwit, dans laquelle les librairies sont à l'extérieur du jar.
    Avant de poster, pensez à regarder la FAQ, les tutoriaux, la Javadoc (de la JRE que vous utilisez) et à faire une recherche
    Je ne réponds pas aux questions techniques par MP: les forums sont faits pour ça
    Mes articles et tutoriaux & Mon blog informatique

  7. #7
    Membre éclairé

    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    788
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 788
    Par défaut re
    ........

    Je ne comprend pas ça veut dire que si je veux distribuer mon application je dois fournir les librairies en plus???
    ALors que si tout est dans le .jar j'ai juste à partager le jar!

    Merci de m'expliquer !!

  8. #8
    Rédacteur
    Avatar de CyberChouan
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 752
    Par défaut
    Citation Envoyé par saturn1 Voir le message
    Je ne comprend pas ça veut dire que si je veux distribuer mon application je dois fournir les librairies en plus???
    Oui, exactement.

    Ton application, c'est le programme que tu as écrit. Les librairies que tu as utilisées ne sont pas ton programme, mais sont nécessaires à celui-ci. Il est donc normal de les redistribuer avec ton programme, afin que les utilisateurs puissent utiliser le programme.


    Il existe une manière d'embarquer le contenu des librairies dans le jar unique du programme, mais :
    - tu noteras que je parle du contenu des librairies et pas des librairies elles-mêmes. Cela suppose donc d'extraire le contenu des librairies.
    - cette manière de procéder n'est pas propre : les classes de ton programme et celles des librairies se retrouvent mélangées.
    - pour beaucoup de librairies, cette manière de procéder est viole le contrat de licence des libraires en question


    Donc effectivement, il est recommander de distribuer en même temps :
    - le jar de ton application
    - les librairies nécessaires à côté
    Avant de poster, pensez à regarder la FAQ, les tutoriaux, la Javadoc (de la JRE que vous utilisez) et à faire une recherche
    Je ne réponds pas aux questions techniques par MP: les forums sont faits pour ça
    Mes articles et tutoriaux & Mon blog informatique

  9. #9
    Rédacteur
    Avatar de benwit
    Profil pro
    dev
    Inscrit en
    Septembre 2004
    Messages
    1 676
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : dev

    Informations forums :
    Inscription : Septembre 2004
    Messages : 1 676
    Par défaut
    Si j'ai fait état d'une arborescence, c'est parce que je me doutai que tu les embarquais dans ton jar.
    Comme dit CyberChouan, si on peut bidouiller pour les inclure, ce n'est pas dans l'esprit.

    Après, pour la distribution de ton application, rien empêche de zipper le tout dans un dossier auquel tu pourras ajouter de la doc, des scripts batch (windows) ou shell (linux) pour "executer" ton jar.

    Tes utilisateurs n'auront qu'à dézipper, c'est pas la fin du monde non plus ...

  10. #10
    Membre éclairé

    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    788
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 788
    Par défaut re
    Ok j'ai changé pour les librairies ....

    Mais il n'arrive toujours pas à trouvé la classe Main :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    saturn1@saturn1-desktop:/home/javaProjects/translator/easy-translator/trunk$ java -jar translator.jar 
    Exception in thread "main" java.lang.NoClassDefFoundError: translator/Main 
    Caused by: java.lang.ClassNotFoundException: translator.Main 
    	at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
    	at java.security.AccessController.doPrivileged(Native Method)
    	at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
    	at java.lang.ClassLoader.loadClass(ClassLoader.java:323)
    	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
    	at java.lang.ClassLoader.loadClass(ClassLoader.java:268)
    	at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:336)
    Could not find the main class: translator.Main . Program will exit.
    Merci de votre aide ...

  11. #11
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    tu a bien un fichier Main.class dans le jar, sous le répertoire "translator" ?

  12. #12
    Membre éclairé

    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    788
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 788
    Par défaut re
    Oui exactement !!
    C'est pour cela que je ne comprend pas l'erreur :/!!

    Merci de ton aide

  13. #13
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    faisons simple, peux tu attacher le .jar à une message au forum, je suppose qu'il ne fait que quelques k

  14. #14
    Membre éclairé

    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    788
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 788
    Par défaut re
    Point de soucis !!!!!!!

    Voici je l'ai mis sous free car developpez ne supporte pas les jar

    http://dl.free.fr/getfile.pl?file=/7oR1UAEf

    Merci

  15. #15
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    ton jar m'a l'air douteux. Quand je lit sa structure ici, je trouve

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    /META-INF/ (dossier)
        MANIFEST.MF
        MANIFEST.MF~
    /translator/ (dossier)
        des fichier .class dont Main.class
    /META-INF (fichier)
    /translator (fichier)
    J'ignore d'où viennent les deux dernier fichiers, mais l'outils "jar" de sun n'est pas très regardant et on peux facilement y créer deux entrées du même nom. Il est possible que ce soit ça qui pose problème. As-tu bien effacé ton jar pour le recréer de 0 et quelle commande as-tu utilisé?

  16. #16
    Membre éclairé

    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    788
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 788
    Par défaut re
    Oui j'ai bien effacer mon jar à chaque fois pour le recréer (j'ai fait plus d'un test...).

    Donc la commande c'est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    jar cvfm translator.jar META-INF/MANIFEST.MF .
    Merci de ton aide

  17. #17
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 42
    Par défaut
    Salut,
    sinon si tu veux créer un exécutable facilement tu peux utiliser des installeurs.
    regarde le tuto que nous a fait Baptiste Wicht.
    http://baptiste-wicht.developpez.com...a/executables/

    a+,

Discussions similaires

  1. Créer un fichier .jar exécutable avec Eclipse
    Par Bloodscalp dans le forum Eclipse Java
    Réponses: 21
    Dernier message: 22/05/2009, 23h22
  2. Créer jar exécutable d'un projet contenant d'autres jar
    Par a tunar with no tune dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 14/12/2007, 00h13
  3. Créer un jar exécutable avec ses dépendances
    Par Foub dans le forum Langage
    Réponses: 8
    Dernier message: 13/05/2007, 12h38
  4. Réponses: 3
    Dernier message: 14/04/2007, 18h46
  5. créer un jar exécutable avec option
    Par _Eric_ dans le forum Langage
    Réponses: 2
    Dernier message: 16/11/2006, 17h09

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