2013-10-01 6 views
0

Вот ошибка, я получаю во время выполнения:Использование внешних библиотек Java

[java] Exception in thread "main" java.lang.NoClassDefFoundError: org/lwjgl/LWJGLException 

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

<path id="classpath"> 
    <fileset dir="lib" includes="*.jar" /> 
</path> 

<target name="compile"> 
    <mkdir dir="build/classes"/> 
    <javac 
     srcdir="src" 
     classpathref="classpath" 
     includeantruntime="false" 
     destdir="build/classes" 
    /> 
</target> 
... 
<target name="run" depends="clean,compile,jar"> 
    <java 
     jar="build/jar/${project.name}.jar" 
     fork="true" 
     classpathref="classpath" 
     > 
     <sysproperty key="java.library.path" path="${path.lib}/windows"/> 
    </java> 
</target> 

Попытка запустить банку с помощью командной строки вручную дает тот же результат:

java -cp .:lib/*.jar -Djava.library.path=lib/windows -jar build/jar/JUtopia.jar 
Exception in thread "main" java.lang.NoClassDefFoundError: org/lwjgl/LWJGLException 

Обратите внимание, что библиотека jarfile нормально:

bash-3.1$ jar -tf lib/lwjgl.jar | grep LWJGLException 
org/lwjgl/LWJGLException.class 

И нативные библиотеки на месте:

bash-3.1$ ls lib/windows/lwjgl.dll 
lib/windows/lwjgl.dll 

Вопрос: где пылают, я пошла не так? Я пробовал эту проблему почти 3 дня. Любая помощь приветствуется.

Полный стек результат:

clean: 
    [delete] Deleting directory C:\Users\mkumpan\Projects\JUtopia\build 

compile: 
    [mkdir] Created dir: C:\Users\mkumpan\Projects\JUtopia\build\classes 
    [javac] Compiling 12 source files to C:\Users\mkumpan\Projects\JUtopia\build\classes 

jar: 
    [mkdir] Created dir: C:\Users\mkumpan\Projects\JUtopia\build\jar 
     [jar] Building jar: C:\Users\mkumpan\Projects\JUtopia\build\jar\JUtopia.jar 

run: 
    [java] Exception in thread "main" java.lang.NoClassDefFoundError: org/lwjgl/LWJGLException 
    [java]  at JUtopia.<init>(Unknown Source) 
    [java]  at JUtopia.main(Unknown Source) 
    [java] Caused by: java.lang.ClassNotFoundException: org.lwjgl.LWJGLException 
    [java]  at java.net.URLClassLoader$1.run(URLClassLoader.java:366) 
    [java]  at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
    [java]  at java.security.AccessController.doPrivileged(Native Method) 
    [java]  at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
    [java]  at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
    [java]  at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
    [java]  at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
    [java]  ... 2 more 

P.S .: Обратите внимание, я использую Console2 с Баш в среде Windows для моей работы командной строки, таким образом окна туземцам еще Линукс синтаксис оболочки. Использование vanilla cmd для запуска кувшина дает тот же результат.

+0

[* Этот ответ *] (http://stackoverflow.com/a/219801/767881) может быть полезен. –

+0

@Ravinder, это близко, но я все равно получаю те же ошибки с кавычками и без .jar. И только cmd-only, и скрипт ant. –

ответ

1

-jar...

When you use this option, the JAR file is the source of all user classes, and other user class path settings are ignored. - reference

setting the Class-Path in the JAR попробовать

В качестве альтернативы попробуйте запустить без опции -Jar, указав основной класс в командной строке

+0

Пятно на. Благодаря! Было добавлено добавление флага к манифесту «Class-Path». Не самый очевидный ответ, который я видел, дайте мне понять. –

0

Одна из возможных причин заключается в том, что при загрузке класса LWJGLException он также ссылается на другой класс, который не может быть найден в пути к классам. Следовательно, сообщенная ошибка иногда не ясна.

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

+0

Это немного расплывчато. Однако использование конкретного файла в CP было отчаянным. Как пустой каталог, так и подстановочный знак * .jar одинаково реагируют. Нет льда. –

Смежные вопросы