2017-01-12 11 views
3

, решаемые, я получил его на работуjava.lang.NoClassDefFoundError, но все файлы банку на месте

Я только что закончил свою первую программу реальной JAVA. Это программа, которая позволяет вам открыть файл .xlsx, и программа извлекает данные из этого файла и показывает это в текстовой области.

В eclipse программа работает совершенно нормально, но экспортированная банка не работает. Как только проект экспортируется, я открываю его в CMD с java -jar c: // ...... и он открывается просто отлично. Однако, когда я пытаюсь открыть файл первенствовать я получаю эту ошибку:

Error message

Так в основном один из необходимых .jar файлов, кажется, не должны быть доступны во время выполнения. Однако я считаю, что все необходимые poi-3.9 и xmlbeans доступны. См. Также:

<?xml version="1.0" encoding="UTF-8"?> 
<classpath> 
    <classpathentry exported="true" kind="lib" path="src/xmlbeans-2.3.0.jar"/> 
    <classpathentry exported="true" kind="lib" path="src/poi-3.9-20121203.jar"/> 
    <classpathentry exported="true" kind="lib" path="src/poi-examples-3.9-20121203.jar"/> 
    <classpathentry exported="true" kind="lib" path="src/poi-excelant-3.9-20121203.jar"/> 
    <classpathentry exported="true" kind="lib" path="src/poi-ooxml-3.9-20121203.jar"/> 
    <classpathentry exported="true" kind="lib" path="src/poi-ooxml-schemas-3.9-20121203.jar"/> 
    <classpathentry exported="true" kind="lib" path="src/poi-scratchpad-3.9-20121203.jar"/> 
    <classpathentry exported="true" kind="lib" path="src/log4j-1.2.13.jar"/> 
    <classpathentry exported="true" kind="lib" path="src/junit-3.8.1.jar"/> 
    <classpathentry exported="true" kind="lib" path="src/commons-logging-1.1.jar"/> 
    <classpathentry exported="true" kind="lib" path="commons-collections4-4.1-javadoc.jar"/> 
    <classpathentry exported="true" kind="lib" path="commons-collections4-4.1.jar"/> 
    <classpathentry exported="true" kind="lib" path="src/commons-codec-1.5.jar"/> 
    <classpathentry exported="true" kind="lib" path="poi-ooxml-3.9.jar"/> 
    <classpathentry kind="src" path="src"/> 
    <classpathentry exported="true" kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/> 
    <classpathentry exported="true" kind="lib" path="lib/commons-codec-1.10.jar"/> 
    <classpathentry exported="true" kind="lib" path="lib/commons-io-2.5.jar"/> 
    <classpathentry exported="true" kind="lib" path="lib/commons-lang3-3.4.jar"/> 
    <classpathentry kind="lib" path="lib/commons-logging-1.2.jar"/> 
    <classpathentry exported="true" kind="lib" path="lib/cssparser-0.9.20.jar"/> 
    <classpathentry exported="true" kind="lib" path="lib/htmlunit-2.23.jar"/> 
    <classpathentry exported="true" kind="lib" path="lib/htmlunit-core-js-2.23.jar"/> 
    <classpathentry exported="true" kind="lib" path="lib/httpclient-4.5.2.jar"/> 
    <classpathentry exported="true" kind="lib" path="lib/httpcore-4.4.4.jar"/> 
    <classpathentry exported="true" kind="lib" path="lib/httpmime-4.5.2.jar"/> 
    <classpathentry exported="true" kind="lib" path="lib/jetty-io-9.2.18.v20160721.jar"/> 
    <classpathentry exported="true" kind="lib" path="lib/jetty-util-9.2.18.v20160721.jar"/> 
    <classpathentry exported="true" kind="lib" path="lib/neko-htmlunit-2.23.jar"/> 
    <classpathentry exported="true" kind="lib" path="lib/sac-1.3.jar"/> 
    <classpathentry exported="true" kind="lib" path="lib/serializer-2.7.2.jar"/> 
    <classpathentry exported="true" kind="lib" path="lib/websocket-api-9.2.18.v20160721.jar"/> 
    <classpathentry exported="true" kind="lib" path="lib/websocket-client-9.2.18.v20160721.jar"/> 
    <classpathentry exported="true" kind="lib" path="lib/websocket-common-9.2.18.v20160721.jar"/> 
    <classpathentry exported="true" kind="lib" path="lib/xalan-2.7.2.jar"/> 
    <classpathentry exported="true" kind="lib" path="lib/xercesImpl-2.11.0.jar"/> 
    <classpathentry exported="true" kind="lib" path="lib/xml-apis-1.4.01.jar"/> 
    <classpathentry exported="true" kind="lib" path="src/jsoup-1.10.1.jar"/> 
    <classpathentry exported="true" kind="lib" path="src/dom4j-1.6.1.jar"/> 
    <classpathentry exported="true" kind="lib" path="src/selenium-server-standalone-3.0.1.jar"/> 
    <classpathentry exported="true" kind="lib" path="src/stax-api-1.0.1.jar"/> 
    <classpathentry kind="lib" path="src/poi-ooxml-3.11.jar"/> 
    <classpathentry exported="true" kind="lib" path="src/xbean-2.0.0.jar"/> 
    <classpathentry kind="output" path="bin"/> 
</classpath> 

См. Также мой заказ и Exporttab в конфигурациях пути сборки.

Export

ли я что-то отсутствует? Любая помощь очень ценится!

EDIT: Я внес некоторые изменения, и все необходимые банки находятся в папке lib/моего проекта. Если я экспортирую банку и просмотрю содержимое банки с помощью: jar tf "location.jar". Я получаю следующее. Поэтому я считаю, что это означает, что все экспортируется красиво. Любые предложения о том, что может пойти не так, потому что я продолжаю получать ту же ошибку.

Contents of JAR and Classpath

+0

Почему у вас есть библиотеки в 'src'? – MozenRath

+0

Попробуйте открыть файл jar с помощью архиватора и убедитесь, что вы можете найти файлы jar библиотек в папке lib, чтобы убедиться, что они были упакованы правильно. – sphinks

+0

все еще 2 проверки отсутствуют в зависимых файлах jar, поэтому просто проверьте все их, а затем попробуйте, может помочь вам – NarendraR

ответ

2

Это происходит потому, что затмение читает ваши зависимости класса пути и включает их во время выполнения, но для запуска экспортированной банки с помощью команды java -jar, вам придется добавить -cp <your-jar-locations-semicolon-separated> так, что JVM знает, что банки должны быть включены в путь класса во время выполнения.

В качестве альтернативы, загляните в здание затененной банки, которая содержит все ваши зависимые банки в экспортируемой банке.

+0

, за ваш быстрый ответ! Я не уверен, как добавить -cp . У меня много банок, нужно ли их добавлять в строку -cp? – Diederik

+0

К сожалению, да. но вы можете создать затененную банку, чтобы включить все зависимости. есть способы сделать это, и вы найдете здесь соответствующие вопросы. – MozenRath

+0

делает '-cp' работу с' -jar'? Из описания java-инструмента «Когда вы используете параметр -jar, указанный JAR-файл является источником всех пользовательских классов, а другие параметры пути пути игнорируются». Я считаю, что '-cp' будет использоваться только для основного файла JAR, в файле манифеста должны быть указаны другие местоположения. –