可怕的java.lang.NoClassDefFoundError

Bri*_*kau 5 java eclipse build-process noclassdeffounderror

我已经查看了许多关于此错误的现有线程,但仍然没有运气.我甚至没有尝试打包或使用任何第三方包装工具.我只是在Eclipse中运行(效果很好),然后尝试从命令行运行完全相同的应用程序,在它构建的同一位置(收到此错误).我的目标是能够压缩bin文件夹并将其发送给其他人通过命令行脚本运行.一些细节:

  • 它是一个命令行应用程序,我使用commons-lang-2.4.jar作为字符串实用程序.那是无法找到的文件(具体是"java.lang.NoClassDefFoundError:org/apache/commons/lang/StringEscapeUtils")
  • 我在我的lib文件夹中有那个jar,并通过右键单击"Build Path - > Add to Build Path"将它添加到我在Eclipse的构建路径中
  • .classpath文件看起来是正确的,并包含了参考罐子,但我认为该文件仅由Eclipse中(包含此行:<classpathentry kind="lib" path="lib/commons-lang-2.4.jar"/>)
  • 这可能与Eclipse工作目录设置有关吗?我有一些我在src/templates下创建的内部模板文件,我可以看到的唯一方法就是将项目工作目录设置为AppName/src.也许我应该把那些放在其他地方?

如果任何其他信息有帮助,请告诉我.当然这很简单,但我现在浪费了太多时间.这让我想起为什么我最初在05年左右离开了Java ...

Bal*_*usC 13

A NoClassDefFoundError基本上意味着类在编译期间在类路径中存在,但在运行时期间它在类路径中丢失.

在您的情况下,使用java.exe命令行执行时,您需要在-cp-classpath参数中指定类路径.或者如果它是JAR文件,则需要在class-pathMANIFEST.MF文件的条目中指定它.

参数/条目的值可以是包含所有.class文件或单个.jar文件的文件夹的绝对或相对文件系统路径.您可以使用分号分隔路径;.当路径包含空格时,您需要使用双引号包装特定路径".例:

java -cp .;c:/path/to/file.jar;"c:/spacy path/to/classes" mypackage.MyClass
Run Code Online (Sandbox Code Playgroud)

为了节省每次在命令行中键入和编辑参数的工作量,请使用.bat文件.

编辑:我应该意识到你正在使用基于Unix的操作系统.以上示例以Windows为目标.对于类似Unix的平台,您可以遵循相同的规则,但是您需要使用冒号:而不是最终批处理文件来分隔路径,使用.sh文件.

java -cp .:/path/to/file.jar:"/spacy path/to/classes" mypackage.MyClass
Run Code Online (Sandbox Code Playgroud)


Dav*_*ker 6

您是否在命令行上指定了java的类路径?

$ java -cp lib/commons-lang-2.4.jar your.main.Class
Run Code Online (Sandbox Code Playgroud)