[英]Using external libraries in 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>
尝试通过命令行手动运行jar会得到相同的结果:
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
PS:请注意,我在Windows环境中将Console2与bash一起使用以进行命令行工作,因此Windows本机用户使用Linux Shell语法。 使用香草cmd运行罐子会得到相同的结果。
-jar...
When you use this option, the JAR file is the source of all user classes, and other user class path settings are ignored.
- 参考
或者,通过在命令行上指定主类,尝试不使用-Jar
选项运行
可能的原因之一是,在加载类LWJGLException时,它还引用了在类路径上找不到的另一个类。 因此,报告的错误有时不清楚。
这里重要的是,您有这个NoClassDefFoundError而不是ClassNotFoundException,这是您假设遇到的错误:它找不到类LWHLException,可以! 但是它无法加载...。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.