2017-05-26 4 views
0

Ich bekam diese Ausnahme, aber ich bin nicht in der Lage zu verstehen, was dort passiert.java.lang.NoClassDefFoundError: org/apache/poi/xssf/usermodel/XSSFWorkbook

Weil meine Klasse in der Lage Zugang Apache POI-Klassen auf der Kompilierung aber auf der Laufzeit meiner Klassen wirft Ausnahme, dass er nicht in der Lage ist

org.apache.poi.xssf.usermodel.XSSFWorkbook finden.

Bis jetzt, was auch immer Lösung im Netz zur Verfügung gestellt wird Ich habe alles versucht, aber nicht zu verstehen, was ich vermisse.

Und seltsame Sache ist der gleiche Code und die gleiche Apache POI-Bibliothek, die an der Sonnenfinsternis meines Freundes arbeitet. Wir haben beide identische Projekte. Versteh nicht, was dort vor sich geht.

Ich überprüfte den Zugriff aller Ordner, wo ich Bibliotheken verweise.

Bitte teilen Sie, wenn Sie einen Vorschlag haben.

Ich bekomme die folgende Ausnahme.

!MESSAGE Unhandled event loop exception 
!STACK 0 
java.lang.NoClassDefFoundError: org/apache/poi/xssf/usermodel/XSSFWorkbook 
    at com.herzog.pmide.mergedconfigxml.ui.editors.DocumentGenerator.prepareScadaIOListExcel(DocumentGenerator.java:94) 
    at com.herzog.pmide.mergedconfigxml.ui.editors.DocumentGenerator.scadaIOList(DocumentGenerator.java:77) 
    at com.herzog.pmide.mergedconfigxml.ui.actions.DocumentGeneratorAction.run(DocumentGeneratorAction.java:47) 
    at org.eclipse.ui.internal.PluginAction.runWithEvent(PluginAction.java:253) 
    at org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:595) 
    at org.eclipse.jface.action.ActionContributionItem.access$2(ActionContributionItem.java:511) 
    at org.eclipse.jface.action.ActionContributionItem$5.handleEvent(ActionContributionItem.java:420) 
    at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) 
    at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4353) 
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1061) 
    at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4172) 
    at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3761) 
    at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$9.run(PartRenderingEngine.java:1151) 
    at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:331) 
    at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1032) 
    at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:148) 
    at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:636) 
    at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:331) 
    at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:579) 
    at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) 
    at com.herzog.pmide.application.Application.start(Application.java:20) 
    at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) 
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:134) 
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104) 
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:380) 
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:235) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:483) 
    at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:648) 
    at org.eclipse.equinox.launcher.Main.basicRun(Main.java:603) 
    at org.eclipse.equinox.launcher.Main.run(Main.java:1465) 
    at org.eclipse.equinox.launcher.Main.main(Main.java:1438) 
Caused by: java.lang.ClassNotFoundException: org.apache.poi.xssf.usermodel.XSSFWorkbook cannot be found by com.herzog.pmide.mergedconfigxml.ui_1.0.0.qualifier 
    at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:432) 
    at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:345) 
    at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:337) 
    at org.eclipse.osgi.internal.loader.ModuleClassLoader.loadClass(ModuleClassLoader.java:160) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 

MANIFEST.MF als

Manifest-Version: 1.0 
Bundle-ManifestVersion: 2 
Bundle-Name: Ui 
Bundle-SymbolicName: com.herzog.pmide.mergedconfigxml.ui;singleton:=true 
Bundle-Version: 1.0.0.qualifier 
Bundle-Activator: com.herzog.pmide.mergedconfigxml.ui.Activator 
Bundle-Vendor: Example 
Require-Bundle: org.eclipse.ui, 
org.eclipse.core.runtime, 
org.eclipse.core.resources, 
org.eclipse.emf.ecore.xmi, 
org.eclipse.emf.edit.ui, 
com.herzog.pmide.machinelib.model.edit, 
org.eclipse.ui.forms, 
org.eclipse.ui.workbench, 
org.eclipse.ui.ide, 
com.herzog.pmide.mergedconfigxml.model.edit, 
org.eclipse.gef, 
com.herzog.pmide.tools.importutility, 
com.herzog.pmide.machinelib.model, 
org.eclipse.swt, 
org.eclipse.emf.query, 
com.herzog.pmide.mergedconfigxml.model, 
org.eclipse.ui.editors, 
org.eclipse.emf.validation, 
org.eclipse.emf.validation.ui, 
org.slf4j.api, 
org.junit, 
org.eclipse.emf.compare, 
org.eclipse.emf.compare.edit, 
org.eclipse.emf.compare.ide.ui, 
org.eclipse.compare, 
org.apache.commons.io, 
org.eclipse.core.filesystem, 
de.vonloesch.pdf4Eclipse, 
de.vonloesch.pdf4eclipse.help, 
com.herzog.pmide.routingline.model 
Bundle-ActivationPolicy: lazy 
Bundle-ClassPath: . 
Export-Package: com.herzog.pmide.mergedconfigxml.ui, 
com.herzog.pmide.mergedconfigxml.ui.editors.unitconfig, 
com.herzog.pmide.mergedconfigxml.ui.views 
Bundle-Localization: OSGI-INF/l10n/message 

build.properties folgen

source.. = src/ 
output.. = bin/ 
bin.includes = META-INF/,\ 
       .,\ 
       plugin.xml,\ 
       icons/,\ 
       OSGI-INF/l10n/message.properties 
+2

Die POI JAR-Datei fehlt in Ihrem Klassenpfad. – Andreas

+0

In Eclipse mit Build-Pfad hinzugefügt POI Jar. und wenn es kein POI-Jar gibt, schlägt diese Ausnahme vor, wie Eclipse mir erlaubt, auf "XSSFWorkbook" -Klassen zuzugreifen. In meinem Code. Weil ich keine Kompilierungsfehler habe. –

+1

Es ist ein Laufzeitfehler, daher ist der Klassenpfad der Laufzeit falsch und nicht der Build-Pfad. Siehe https://stackoverflow.com/questions/2520821/java-problem-with-the-classpath-on-eclipse. –

Antwort

3

Ein Plugin nur im Plugin enthalten Zugriffsklassen in anderen Plugins oder in Gläsern können folgen die enthalten sind, im Paketklassenpfad. Durch das Festlegen der Java-Buildpfadeigenschaften wird das Plug-in nicht richtig konfiguriert.

Fügen Sie alle benötigten Dateien zum Plugin hinzu, normalerweise werden diese in ein 'lib' Verzeichnis gestellt.

Aktualisieren Sie die Build.properties, um diese JAR-Dateien in den Abschnitt 'bin.includes' aufzunehmen. Zum Beispiel:

source.. = src/ 
output.. = bin/ 
bin.includes = META-INF/,\ 
       .,\ 
       plugin.properties,\ 
       plugin.xml,\ 
       lib/,\ 
       lib/jogg-0.0.7.jar,\ 
       lib/jorbis-0.0.15.jar,\ 
       lib/vorbisspi1.0.2.jar 

Hier habe ich drei Gläser in einem lib (diese sind nicht die POI-Gläser, dies ist nur ein Beispiel von einem meiner Projekte).

Aktualisieren Sie die MANIFEST.MF und setzen Sie die Bundle-Classpath auf die Gläser. Sie können dies im MANIFEST.MF-Editor auf der Registerkarte 'Runtime' im Abschnitt 'Classpath' tun (verwenden Sie die Schaltfläche Hinzufügen ... rechts neben der Liste und wählen Sie die Bibliotheken im Plugin). Achten Sie darauf, den Eintrag für '.' Zu belassen. Ihre MANIFEST.MF sollte einen 'Bundle-Classpath' Eintrag wie folgt enthalten:

Bundle-ClassPath: ., 
lib/jogg-0.0.7.jar, 
lib/jorbis-0.0.15.jar, 
lib/vorbisspi1.0.2.jar 
+0

Danke für Ihre Zeit. Ich habe den ersten Schritt gemacht. im zweiten Schritt "Registerkarte 'Runtime' im Abschnitt 'Classpath'", wie diese Einträge dort kommen. Kann ich die Datei MANIFEST.MF manuell bearbeiten, indem ich den Namen der gesamten Bibliothek schreibe? –

+1

Sie klicken rechts neben der Classpath-Liste auf die Schaltfläche Hinzufügen ... und wählen die JAR-Dateien im Plugin aus, oder Sie können die MANIFEST.MF-Datei direkt bearbeiten. –

+0

Sie sind ein großer Mann. Danke !. –

Verwandte Themen