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

Documents Java Discussion :

ClassNotFoundException avec HSSFWorkbook de POI 4.1.2


Sujet :

Documents Java

  1. #1
    Membre expérimenté Avatar de rtg57
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2006
    Messages
    1 340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 340
    Points : 1 576
    Points
    1 576
    Par défaut ClassNotFoundException avec HSSFWorkbook de POI 4.1.2
    Bonjour,

    je tente de créer un classeur 'EXCEL' en utilisant les librairies POI4.1.2 de l'organisation APACHE.
    J'ai contrôler l'intégrité du fichier ZIP téléchargé depuis leur site, et il est OK.

    lors de la création du 'classeur':

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    HSSFWorkbook classeurBase = new HSSFWorkbook();
    2 exception sont levées:
    - java.lang.ClassNotFoundException: org.apache.poi.hssf.usermodel.HSSFWorkbook
    - java.lang.NoClassDefFoundError: org.apache.poi.hssf.usermodel.HSSFWorkbook

    Ayant intégré dans le ClassPath tous les JARs que j'ai trouvé dans le ZIP, je ne sais plus quoi faire pour trouver le remède à ce problème.
    Nom : Imports JAR.jpg
Affichages : 986
Taille : 236,5 Ko


    Il faudrait que je sache quelle est la classe qui manque dans cette bibliothèque... mais comment faire ?

    Merci & @ bientôt...
    @ bientôt...

    Salut & @+ sur 3W!

  2. #2
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    La classe HSSFWorkbook est dans le jar poi-4.1.2.jar
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre expérimenté Avatar de rtg57
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2006
    Messages
    1 340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 340
    Points : 1 576
    Points
    1 576
    Par défaut
    Bonjour OButterlin,

    effectivement, d'ailleurs le fichier 'poi-4.1.2.jar' figure bien dans le ClassPath.
    D'ailleurs si ce n'était pas le cas, j'aurais déjà un problème à la compilation.
    Dans mon cas, le problème survient uniquement pendant l'exécution, et je ne sais pas quelle classe fait défaut...

    @ bientôt...
    @ bientôt...

    Salut & @+ sur 3W!

  4. #4
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    Il doit y avoir un problème sur ce jar, si tu regardes bien, l'icône n'est pas la même que sur les autres jar de ton path, ça veut peut-être signifier quelque chose...
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre expérimenté Avatar de rtg57
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2006
    Messages
    1 340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 340
    Points : 1 576
    Points
    1 576
    Par défaut
    Bonjour OButterlin,

    non cet icône diffère simplement parce que j'ai indiqué dans le ClassPath le fichier source.
    Nom : Imports JAR 2.jpg
Affichages : 925
Taille : 143,0 Ko


    On peut s'en assurer sur ce lien ici.

    Le dysfontionnement existait déjà avant que j'y ajoute le source.
    L'idée était de pouvoir naviguer dans le programme pendant la session de débogage... mais même pas ! Le plantage a lieu bien avant de rentrer dans le constructeur.
    A l'instruction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    HSSFWorkbook classeurBase = new HSSFWorkbook();
    le programme attaque par la classe abstraite ClassLoader notamment par la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public Class<?> loadClass (String className) throws ClassNotFoundException
    Après, çà part dans des méandres que je ne comprends pas, et puis finit par lancer l'exception... et je ne sais pas pourquoi.

    Ce qui m'embête, c'est que je ne suis pas le seul à utiliser cette librairie.
    Tous ceux qui ont ce genre de problème finissent par le résoudre en ajoutant le fichier JAR manquant...
    @ bientôt...

    Salut & @+ sur 3W!

  6. #6
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    C'est curieux... quand tu as le plantage, c'est quand tu lances ton programme directement dans Eclipse ou en dehors ?
    Autre question, la classe que tu lances est dans le projet que tu montres ou dans un autre ?

    Pour information, j'utilise la version poi-4.1.2, je n'ai pas ton problème.
    Voici les jar dans le path :

    activation-1.1.1.jar
    commons-codec-1.13.jar
    commons-collections4-4.4.jar
    commons-compress-1.19.jar
    commons-logging-1.2.jar
    jaxb-api-2.3.1.jar
    jaxb-core-2.3.0.1.jar
    jaxb-impl-2.3.2.jar
    poi-4.1.2.jar
    poi-ooxml-4.1.2.jar
    poi-ooxml-shemas-4.1.2.jar
    xmlbeans-3.1.0.jar


    J'utilise une classe "main" dans mon projet pour faire le test et ça fonctionne.
    Ensuite, bien sûr, quand il s'agira de construire la bibliothèque pour un usage dans les applications, il faudra générer un jar qui contient les bibliothèques de poi ou alors d'ajouter ces jar dans le classpath de l'application utilisatrice.
    Personnellement, j'utilise la solution d'intégrer les jar de poi à mon jar "bibliothèque" (via Export -> Runnable JAR file).
    Le jar généré est plus gros mais il est autonome, et depuis que j'utilise poi, j'ai presque toujours dû modifier des éléments quand je change de version de poi... là, la bibliothèque reste intègre.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre expérimenté Avatar de rtg57
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2006
    Messages
    1 340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 340
    Points : 1 576
    Points
    1 576
    Par défaut
    Merci pour ton aide OButterlin, mais là, je crois que c'est mort

    J'ai les mêmes JARs que toi, avec les mêmes versions.
    J'ai même configuré l'ordre des importations pour refléter le même que le tien... au cas où.
    Rien y fait... le problème est probablement ailleurs mais où ? ... çà me désespère.

    J'espère que ce n'est pas le fait d'utiliser jdk-11.0.6-openj9...

    Parce que par curiosité, je viens de compiler avec jdk-13.0.2... et là le projet ne va bien loin au démarrage !
    En effet, dans la classe principale, j'ai une méthode qui utilise un objet HSSFWorkbook, et sans même faire appel à cette méthode, j'ai dès le lancement, un message dans la console:
    Error: Unable to initialize main class pck01Commun.C_GMO
    Caused by: java.lang.NoClassDefFoundError: org/apache/poi/hssf/usermodel/HSSFWorkbook


    Apparemment, le JDK 13 fait des tests au démarrage du projet et détecte tout de suite qu'il manque quelque chose.
    Bien qu'intéressant comme découverte... cela ne résout pas mon problème

    L'idéal serait d'avoir dans le message, quel est l'élément manquant...
    @ bientôt...

    Salut & @+ sur 3W!

  8. #8
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par rtg57 Voir le message
    Parce que par curiosité, je viens de compiler avec jdk-13.0.2... et là le projet ne va bien loin au démarrage !
    En effet, dans la classe principale, j'ai une méthode qui utilise un objet HSSFWorkbook, et sans même faire appel à cette méthode, j'ai dès le lancement, un message dans la console:
    Error: Unable to initialize main class pck01Commun.C_GMO
    Caused by: java.lang.NoClassDefFoundError: org/apache/poi/hssf/usermodel/HSSFWorkbook


    Apparemment, le JDK 13 fait des tests au démarrage du projet et détecte tout de suite qu'il manque quelque chose.
    Bien qu'intéressant comme découverte... cela ne résout pas mon problème

    L'idéal serait d'avoir dans le message, quel est l'élément manquant...
    Ben, il te le dit, c'est la classe HSSFWorkbook qu'il n'a pas trouvé

    Peux-tu montrer le code qui provoque l'erreur (le main) et la structure globale de ton projet ?

    (pour info, j'utilise l'open jdk 11.0.2 sur ma machine)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  9. #9
    Membre expérimenté Avatar de rtg57
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2006
    Messages
    1 340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 340
    Points : 1 576
    Points
    1 576
    Par défaut
    Bonjour OButterlin,

    impossible de faire un résumé du projet mais j'ai fait un test tout bête dans le programme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
     
    package pck01Commun; // C'est le package où se situe la classe principale
     
    ...
    import  Blabli Blabla
    import javax.swing.text.MaskFormatter;
     
    import org.apache.poi.hssf.usermodel.HSSFWorkbook; // Voici les imports effectués par Eclipse
     
    import pck01Commun.C_GestionDonnees.CBddCategorie1712;
    import  Blabla Blabli
    ...
     
     
    /**
     * @version 2020/02
     */
    public class C_GMO extends JFrame implements WindowListener, ActionListener
    {
            private static final long serialVersionUID = 1L;
     
            public final HSSFWorkbook classeurExcel;
     
            /...
            .../
     
     
     
    	/**
             * @since 2020/xx
             * @category Constructeur
             */
    	public C_GMO() {
     
    		classeurExcel = new HSSFWorkbook();
     
            /...
            .../
     
     
     
            }
     
    /...
    .../
     
    }
    A l'instruction ligne [35]... boum... exception !

    Exception in thread "main" java.lang.NoClassDefFoundError: org.apache.poi.hssf.usermodel.HSSFWorkbook
    at pck01Commun.C_GMO.<init>(C_GMO.java:570)
    at pck01Commun.C_GMO.main(C_GMO.java:1289)
    Caused by: java.lang.ClassNotFoundException: org.apache.poi.hssf.usermodel.HSSFWorkbook
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:766)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:1078)
    ... 2 more


    ... et pourtant, 'poi4.1.2.jar' est bien dans le ClassPath...

    Nom : Imports JAR 2.jpg
Affichages : 903
Taille : 136,2 Ko
    @ bientôt...

    Salut & @+ sur 3W!

  10. #10
    Membre expérimenté Avatar de rtg57
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2006
    Messages
    1 340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 340
    Points : 1 576
    Points
    1 576
    Par défaut
    Bonjour,

    j'ai décidé de reprendre le problème à '0' et j'ai créé un projet tout simple basé sur l'exemple fournit pat JM Doudoux: https://jmdoudoux.developpez.com/cou...-documents.php

    Pour que cela fonctionne, le ClassPath est vraiment minimal:
    Nom : Imports JAR.jpg
Affichages : 891
Taille : 71,7 Ko

    Et çà marche !

    Cela signifie que dans le gros projet en défaut, il y a probablement une interférence avec les autres JARs... c'est possible çà ?
    Qu'est-ce que vous en pensez ?
    @ bientôt...
    @ bientôt...

    Salut & @+ sur 3W!

  11. #11
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    J'ai refait un test vite fait et c'est assez curieux, il faut impérativement le jar poi-ooxml-4.1.2.jar, sinon, il ne voit aucune classe... alors que XSSFWorkbook est bien dans poi-4.1.2.jar...

    Sinon, j'ai pensé à un truc également : quand tu as créé ton projet java, tu as créé un module ou non ?
    Personnellement, je ne l'ai pas fait et ça fonctionne.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  12. #12
    Membre expérimenté Avatar de rtg57
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2006
    Messages
    1 340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 340
    Points : 1 576
    Points
    1 576
    Par défaut
    Bonjour OButterlin,

    merci pour ton soutien tout au long de ce post.

    Je pense que le problème provient de l'EDI Eclipse...
    Je me suis résolu à créer un nouveau projet en partant de zéro.
    J'ai ensuite intégré dans la méthode Main(), ce simple exemple pêché parmi les cours de JM Doudoux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    		System.out.println( "Bonjour" ); // FIXME
     
    	    HSSFWorkbook wb = new HSSFWorkbook();
    	    FileOutputStream fileOut;
     
    	    try
    	    {
    	      fileOut = new FileOutputStream( "monfichier.xls" );
    	      wb.write(fileOut);
    	      fileOut.close();
    	    }
    	    catch( FileNotFoundException e )
    	    {
    	      e.printStackTrace();
    	    }
    	    catch ( IOException e )
    	    {
    	      e.printStackTrace();
    	    }
     
    	    try
    		{
    			wb.close();
    		}
    		catch( IOException e )
    		{
    			e.printStackTrace();
    		}
     
    		System.out.println( "Au revoir" ); // FIXME
    Jusque là, çà fonctionne.

    Puis j'ai copié peu à peu en plusieurs étapes, tous les sources de l'ancien projet.
    A chaque fois, le code de test fonctionnait.

    Pour finir, je me suis retrouvé avec un nouveau projet ressemblant comme 2 gouttes d'eau, à l'ancien projet... et le test fonctionne toujours !

    Le dysfonctionnement rencontré reste un mystère pour moi.
    Je ferme le post, mais reste perplexe
    @ bientôt...

    Salut & @+ sur 3W!

  13. #13
    Membre émérite
    Avatar de Mickael_Istria
    Homme Profil pro
    Développeur Expert Eclipse IDE/RCP, pour Red Hat
    Inscrit en
    Juillet 2008
    Messages
    1 469
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Expert Eclipse IDE/RCP, pour Red Hat
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 469
    Points : 2 997
    Points
    2 997
    Par défaut
    Citation Envoyé par rtg57 Voir le message
    Je pense que le problème provient de l'EDI Eclipse...
    Si tu arrives a reproduire ce probleme ou que tu as un projet tout pret qui le reproduit systematiquement, alors tu peux decrire le bug sur https://bugs.eclipse.org/bugs/enter_...component=Core et il sera resolu un de ces 4.
    Pour du HTML, CSS, JavaScript, TypeScript, JSon, Yaml, Node... dans Eclipse IDE, installe Eclipse Wild Web Developer
    Pour du Rust dans Eclipse IDE, installe Eclipse Corrosion
    Follow me on twitter

  14. #14
    Membre expérimenté Avatar de rtg57
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2006
    Messages
    1 340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 340
    Points : 1 576
    Points
    1 576
    Par défaut
    Bonjour Mickael,

    je n'ai pas compris d'où vient le problème exactement...

    Je pensais au départ que le dysfonctionnement provenait de mes fichiers ".classpath" et ".project", mais je me suis assuré que ceux-ci étaient identiques aussi bien pour le projet qui boguait que pour le nouveau projet qui fonctionne.

    Ensuite j'ai pensé que peut être, lors du lancement de l'application, j'initialisais un truc qui faisait planter la machinerie, alors j'ai simplifié les opérations de démarrage du projet qui plante, de manière à ce qu'il effectue la même chose que le nouveau projet test.
    Les séances de déboguage me montraient clairement que les 2 projets semblaient démarrer de la même manière.

    Donc j'ai 'copier-coller' petit à petit les sources du projet bogué vers le nouveau projet. A chaque étape, je m'assurais que l'utilisation d'un HSSFWorkbook ne posait pas de problème.

    ... jusqu'à arriver à un nouveau projet clone de l'ancien.

    Est-ce qu'Eclipse tient à jour des fichiers 'cachés' mémorisant les différentes modifications du code, pour le travail collaboratif ?
    J'ai regardé ce qu'il y a dans le fichier 'org.eclipse.jdt.core.prefs', et je ne pense pas que ce soit là-dedans qu'il y a un truc qui pose problème.
    En finalité, je n'arrive pas à m'expliquer ce phénomène...
    @ bientôt...

    Salut & @+ sur 3W!

  15. #15
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    Si je peux me permettre, lorsqu'on a un fonctionnement incompréhensible dans Eclipse, la plupart du temps, il suffit de faire un clean sur le(s) projet(s) impliqué(s).
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. ClassNotFoundException avec Geotools
    Par AlKoLiK dans le forum API standards et tierces
    Réponses: 1
    Dernier message: 11/05/2009, 15h38
  2. ClassNotfoundException avec JMS sous Jonas 4.10
    Par hasalex dans le forum JOnAS
    Réponses: 5
    Dernier message: 07/05/2009, 13h51
  3. Réponses: 6
    Dernier message: 02/02/2009, 17h01
  4. Réponses: 6
    Dernier message: 20/02/2007, 10h42
  5. Problème avec la librairie POI
    Par clement42 dans le forum Documents
    Réponses: 3
    Dernier message: 18/11/2005, 19h11

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