web-dev-qa-db-fra.com

que donne Java.lang.NoClassDefFoundError?

Je veux lire le fichier Excel mais donne

    Exception in thread "main" Java.lang.NoClassDefFoundError: org/Apache/xmlbeans/XmlObject
 at ExcelReader.main(ExcelReader.Java:32)
Caused by: Java.lang.ClassNotFoundException: org.Apache.xmlbeans.XmlObject
at Java.net.URLClassLoader$1.run(Unknown Source)
at Java.net.URLClassLoader$1.run(Unknown Source)
at Java.security.AccessController.doPrivileged(Native Method)
at Java.net.URLClassLoader.findClass(Unknown Source)
at Java.lang.ClassLoader.loadClass(Unknown Source)
at Sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at Java.lang.ClassLoader.loadClass(Unknown Source)
... 1 more

aidez-moi, s'il vous plaît. Au début, ouvrez le fichier .xlsx, puis donnez la première feuille. à la fin, imprimer les données du fichier Excel sur la console. Ps: j'ajoute poi-ooxml-3.9-20121203.jar à mon projet.

    import Java.io.File;
    import Java.io.FileInputStream;
    import javax.swing.text.html.HTMLDocument.Iterator;
    import org.Apache.poi.hssf.usermodel.HSSFSheet;
    import org.Apache.poi.hssf.usermodel.HSSFWorkbook;
    import org.Apache.poi.ss.usermodel.Cell;
    import org.Apache.poi.ss.usermodel.Row;
    import org.Apache.poi.xssf.usermodel.XSSFSheet;
    import Java.util.*;
    import org.Apache.poi.xssf.usermodel.XSSFWorkbook;
    /**
     * @author mohammad hosein
    *
    */
    public class ExcelReader {

/**
 * @param args
 */
public static void main(String[] args) {
    try
    {
    FileInputStream file = new FileInputStream(new File("E:\\test.xlsx"));

    //Get the workbook instance for XLS file 
    XSSFWorkbook workbook = new XSSFWorkbook (file);

    //Get first sheet from the workbook
    XSSFSheet sheet = workbook.getSheetAt(0);

    //Get iterator to all the rows in current sheet
    Java.util.Iterator<Row> rowIterator = sheet.iterator();

    while(rowIterator.hasNext())
    {
        Row row = rowIterator.next();
        Java.util.Iterator<Cell> cellIterator = row.cellIterator();

        while(cellIterator.hasNext())
        {
            Cell cell = cellIterator.next();
            System.out.print(cell.getStringCellValue() + "\t");
        }
        System.out.println("");
    }
    }
    catch(Exception e)
    {
        System.out.println("EROR!");
    }

    //Get iterator to all cells of current row

}

}

6
sharafi

Votre code est sans importance. NoClassDefFoundError survient lorsqu'une classe disponible au moment de la compilation n'est pas disponible au moment de l'exécution. Si vous fournissez un stacktrace complet, ainsi que le nom réel de la classe qui n'a pas été trouvée, des conseils plus précis peuvent être donnés.

Cela se produit généralement lorsque vous exécutez votre code avec une version différente d'un fichier JAR de celle utilisée pour générer le code. Un fichier JAR non fiable peut provenir d’un conteneur d’application ou autre, et être placé plus tôt sur le chemin de classe que votre fichier JAR approprié.

Mettre à jour

Compte tenu du stacktrace que vous avez ajouté, il vous manque une dépendance transitive de POI Apache: XMLBeans. Vous pouvez manquer ce fichier JAR au moment de l'exécution. Tout dépend de la manière dont vous exécutez votre projet.

12
Marko Topolnik

Je pense que vous avez oublié de vérifier la bibliothèque dans la propriété de Project.

  1. Clic droit sur votre projet -> Sélectionner une propriété
  2. Sélectionner le chemin de construction Java
  3. Sélectionnez l'onglet Objet et exportation
  4. Et puis sélectionnez votre bibliothèque que vous avez ajoutée.
  5. Et Ok puis relancez votre projet.

Cela se produira si tous les fichiers jar poi requis ne sont pas ajoutés. Par conséquent, ma suggestion est d'ajouter tous les fichiers jar requis. Ajoutez les fichiers jar dans les dossiers lib et ooxml-lib avec les fichiers jar poi-3.15-beta2.

  1. Clic droit sur le projet
  2. Buildpath> ConfigureBuildpath
  3. Onglet Bibliothèques
  4. Ajouter des fichiers jar externes
2
user3437379

Assurez-vous d'avoir ajouté le fichier "commons-collections.jar" dans votre bibliothèque, sinon téléchargez tous les fichiers de bibliothèques à partir d'ici:

http://www-us.Apache.org/dist/poi/release/bin/poi-bin-3.16-20170419.Zip

Après le téléchargement dans le fichier Zip, ouvrez le dossier "lib" et retrouvez le fichier common-collectins.jar à ajouter à votre bibliothèque de projet, comme vous pouvez le voir sur l'image jointe:

 Image shows all necessary libraries

1
A.Aleem11

La documentation Apache POI fournit une liste complète des différents composants et de leurs dépendances . Vous indiquez que vous souhaitez utiliser poi-ooxml mais vous semblez avoir oublié la dépendance xmlbeans (et peut-être d'autres aussi!). Voir la page components pour plus de détails sur ce dont tout a besoin.

Si vous téléchargez une version binaire de Apache POI , toutes les dépendances dont vous pourriez avoir besoin seront contenues dans le paquet. Ajoutez simplement ceux dont vous avez besoin.

Si tout ce travail manuel est un peu difficile pour vous, utilisez quelque chose comme Apache Maven ou Apache Ivy pour gérer vos dépendances à votre place.

Ensuite, vous aurez besoin de tous ces bocaux disponibles deux fois. Une fois pour la compilation, une fois pour la course. Le simple fait de disposer des pots dans Eclipse ou similaire peut ne pas suffire, vous devez également les insérer dans votre environnement de production!

1
Gagravarr

Il y a 2 fichiers jar importants qui viennent avec poi-3.9 qui doivent être inclus car XSSFWorkbook les utilise

xmlbeans * .jar dom4j - *. jar

Ces deux fichiers jars sont présents dans le dossier ooxml-lib et font partie de poi-3.9 * .Zip. Incluez-les dans votre bibliothèque et cela devrait résoudre le problème.

0
vikas kapdoskar

ajoutez xmlbeans-2.3.0.jar dans votre chemin de construction. Il est requis pour xlsx.

0
Saurabh

NoClassDefFoundError viendra si une classe était présente au moment de la compilation mais non disponible dans le chemin de classes Java lors de l'exécution. Normalement, vous verrez la ligne ci-dessous dans le journal lorsque vous obtenez NoClassDefFoundError:

Ce site vous donne toutes les raisons pour lesquelles vous obtenez cette erreur 3 façons de la résoudre 

0
Arun

J'ai juste eu le même problème. J'avais ajouté les JAR dans le dossier\ooxml-lib\en ajoutant le dossier entier aux bibliothèques (avec Netbeans). et cela a fonctionné. 

0
RudebwoyG

Comme son nom l'indique, ClassNotFoundException en Java est une sous-classe de Java.lang.Exception et est disponible lorsque Java Virtual Machine tente de charger une classe particulière et ne trouve pas la classe demandée dans classpath. 

Un autre point important à propos de cette exception est qu’il s’agit d’une exception vérifiée et que vous devez fournir explicitement le traitement des exceptions lors de l’utilisation de méthodes qui peuvent éventuellement lancer ClassNotFoundException en Java, en utilisant le bloc try-catch ou la clause throws. . 

Documents Oracle

public class ClassNotFoundException
 extends ReflectiveOperationException

Lancé lorsqu'une application tente de charger une classe via son nom de chaîne en utilisant:

  • La méthode forName dans la classe Class.
  • La méthode findSystemClass dans la classe ClassLoader.
  • La méthode loadClass dans la classe ClassLoader. 

mais aucune définition de la classe avec le nom spécifié n'a pu être trouvée. 

Ajoutez le fichier poi-ooxml-schemas-3.9-20121203.jar au chemin de classe pour éviter les exceptions.
Vous trouverez sur ces liens 

  1. Apache
  2. obtenir un bocal

Modifier 

Vous manquez les fichiers jar supplémentaires fournis avec les POI. Incluez-les dans votre chemin de classe.
vous devez inclure un fichier jar nommé xmlbeans-x.x.x.jarobtenir un fichier jar ici .
XMLBeans

0
Aniket Kulkarni

En général, NoClassDefFoundErrorexception se produira lorsque le fichier JAR requis n’est pas disponible.

Vérifiez les conditions ci-dessous  

  1. Vérifiez le Jar file path par défaut vous avez ajouté poi-ooxml-3.9-20121203.jar
  2. Vérifiez complètement si un fichier jar supplémentaire est requis. Lors de la compilation, le programme Peut nécessiter des fichiers de classe non importés.

  3. poi-3.7-jdk1.4-20110508-rc2 jar est requis.

0
kark