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 :

ClassNotFoundException dans un JAR


Sujet :

Java

  1. #1
    Membre éclairé
    Avatar de rozwel
    Inscrit en
    Mars 2002
    Messages
    324
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 324
    Par défaut ClassNotFoundException dans un JAR
    Je suis en train de développer une application desktop avec Maven 2 et tout le bataclan et le résultat de tout ça c'est une archive JAR qui devrait être directement exécutable. Pour ça, j'ai fait en sorte que le fichier META-INF/MANIFEST.MF contienne les lignes suivantes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Main-Class: org.epseelon.koala.Koala
    Class-Path: rome-0.8.jar jdom-1.0.jar xstream-1.2.jar annotations-1.0.
     jar xpp3-1.1.3.4.O.jar jdic-20060613.jar
    Pourtant quand j'exécute l'archive avec la ligne suivante:
    java -jar target/dist/myapp-1.0-SNAPSHOT-bin.jar
    J'obtiens le message d'erreur:
    Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/syndication/io/FeedException
    at org.epseelon.koala.Koala.main(Koala.java:38)
    Alors que com.sun.syndication.io.FeedException est dans la librairie rome-0.8.jar qui figure bien à la racine du JAR.

    Je ne comprends pas ce qui ne va pas. Est-ce que quelqu'un aurait une idée?

  2. #2
    Membre éprouvé
    Avatar de Janitrix
    Inscrit en
    Octobre 2005
    Messages
    3 391
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 3 391
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java -jar target/dist/myapp-1.0-SNAPSHOT-bin.jar
    C'est peut être une question bête mais pourquoi n'executes-tu pas ton jar directement à partir du dossier 'dist' ?

  3. #3
    Membre éclairé
    Avatar de rozwel
    Inscrit en
    Mars 2002
    Messages
    324
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 324
    Par défaut
    Parce que sûrement à cause du problème ci-dessus, quand je double-clique sur le fichier ou que je l'exécute avec javaw, rien ne se passe...

  4. #4
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Attention, si j'ai bien compris tu as rome-0.8.jar à l'intérieur de myapp-1.0-SNAPSHOT-bin.jar?
    Tu ne peux pas imbriquer des jar comme ça (sinon ça ne fonctionne pas)...

    Soit tu mets tes .jar "au même niveau" en gérant le classpath, soit tu extrais tous tes jar "librairies" dans ton jar principal...

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 141
    Par défaut
    mmh.. j'étais pourtant assez convaincu (voire persuadé) qu'on pouvait inclure ses dépendances dans un JAR de façon à pouvoir distribuer son application simplement...
    Sinon, j'ai trouvé ça sur google http://one-jar.sourceforge.net/ SANS essayer par contre
    Faudrait que je teste l'imbrication de jar mais c'est franchement pas la joie si il n'y a aucun moyen de distribuer facilement une application desktop java

  6. #6
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Citation Envoyé par Wavyx
    mmh.. j'étais pourtant assez convaincu (voire persuadé) qu'on pouvait inclure ses dépendances dans un JAR de façon à pouvoir distribuer son application simplement...
    Sinon, j'ai trouvé ça sur google http://one-jar.sourceforge.net/ SANS essayer par contre
    Faudrait que je teste l'imbrication de jar mais c'est franchement pas la joie si il n'y a aucun moyen de distribuer facilement une application desktop java
    Comme je t'ai dit, il suffit d'extraire toutes tes "librairies" et de les intégrer dans un seul jar... (au lieu de mettre ton jar A dans ton jar B, tu mets le contenu de ton jar A dans ton jar B)

    C'est ce que je fais pour faire une appli en 1 fichier...

  7. #7
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Citation Envoyé par ®om
    Comme je t'ai dit, il suffit d'extraire toutes tes "librairies" et de les intégrer dans un seul jar... (au lieu de mettre ton jar A dans ton jar B, tu mets le contenu de ton jar A dans ton jar B)

    C'est ce que je fais pour faire une appli en 1 fichier...
    Mouaip, par contre il n'est pas sur que celà soit possible avec toutes les librairies, celà dépendant de la licence de celle ci.

    Donc la seule solution est de passer par un classloader bidouillé comme le fait onejar (qui sert de base au plugin fatjar d'eclipse)

  8. #8
    Membre éclairé
    Avatar de rozwel
    Inscrit en
    Mars 2002
    Messages
    324
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 324
    Par défaut
    Ah OK, j'étais pas du tout au courant de cette limitation des JAR. Du coup je vais voir si distribuer tout sous forme d'une seule archive est vraiment nécessaire et si c'est le cas, je jetterai un oeil à one-jar. Sinon j'éclaterai le tout. Merci pour vos réponses.

    (Et maintenant zou... examen SCJP )

  9. #9
    Membre éprouvé
    Avatar de Deadpool
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    1 312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 1 312
    Par défaut
    Des plugins spécialisés permettent d'imbriquer des Jars dans d'autres Jars.

    Par exemple si tu utilise Eclipse il y a Fat Jar.

  10. #10
    Membre éclairé
    Avatar de rozwel
    Inscrit en
    Mars 2002
    Messages
    324
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 324
    Par défaut
    En l'occurrence j'utilise Maven2 et le plugin assembly pour produire mon JAR et j'espérais que Assembly s'occuperait de tout. Mais visiblement ce n'est pas le cas, ce qui est très bizarre. Maintenant que j'y pense, je me demande si ce n'est pas un problème dans ma configuration de Assembly.

    Un gourou Maven2 dans le coin?

  11. #11
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Perso, je le fais par ANT...

Discussions similaires

  1. Réponses: 2
    Dernier message: 03/07/2013, 12h02
  2. Réponses: 3
    Dernier message: 24/11/2006, 11h12
  3. [Jar][Classpath]Pb chargement resource classpath dans un jar
    Par Pill_S dans le forum Général Java
    Réponses: 20
    Dernier message: 01/10/2004, 20h12
  4. [JAR] Accéder à un fichier dans un jar
    Par Nanoua dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 06/07/2004, 13h00
  5. [jar] BufferedImage issue d'un .jpeg dans un jar
    Par tit_henry dans le forum Entrée/Sortie
    Réponses: 7
    Dernier message: 13/05/2004, 10h09

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