首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >可怕的java.lang.NoClassDefFoundError

可怕的java.lang.NoClassDefFoundError
EN

Stack Overflow用户
提问于 2009-11-09 18:31:20
回答 7查看 10.3K关注 0票数 5

我已经查看了许多现有线程中有关此错误的内容,但仍然没有找到任何结果。我甚至没有试图包装一个罐子或使用任何第三方包装工具。我只是在Eclipse内部运行(非常好),然后尝试从命令行运行完全相同的应用程序,并将其建在相同的位置(获取此错误)。我的目标是能够压缩bin文件夹并将其发送出去,由其他人通过命令行脚本运行。一些细节:

  • ,这是一个命令行应用程序,我使用commons-lang-2.4.jar作为字符串实用程序。这是一个无法定位的文件(具体而言,“org/apache/commons/lang/StringEscapeUtils")
  • I”:<classpathentry kind="lib" path="lib/commons-lang-2.4.jar"/>)
  • Could将该jar放在我的lib文件夹中,并通过右键单击"Build Path -> Add to Build path“
  • 将其添加到Eclipse中的构建路径) .classpath文件看起来正确,并包含对jar的引用,但我假设该文件仅由Eclipse使用(包含此行:<classpathentry kind="lib" path="lib/commons-lang-2.4.jar"/>)
  • Could这与Eclipse目录设置相关?我创建了一些内部模板文件,这些文件在src/ template下创建,唯一可以看到的方法是将项目工作目录设置为AppName/src。也许我该把这些放在别的地方?

如果有更多的信息可以帮上忙就告诉我。当然,这是很简单的事情,但我在这一点上浪费了太多时间。这提醒了我为什么我在05年左右离开了Java .

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2009-11-09 18:37:21

NoClassDefFoundError基本上意味着类在编译时存在于类路径中,但在运行时类路径中缺少类路径。

在您的示例中,当从命令行使用java.exe执行时,需要在-cp-classpath参数中指定类路径。如果是JAR文件,则需要在其class-path文件的MANIFEST.MF条目中指定它。

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

代码语言:javascript
运行
复制
java -cp .;c:/path/to/file.jar;"c:/spacy path/to/classes" mypackage.MyClass

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

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

代码语言:javascript
运行
复制
java -cp .:/path/to/file.jar:"/spacy path/to/classes" mypackage.MyClass
票数 13
EN

Stack Overflow用户

发布于 2009-11-09 18:34:50

您是否在命令行中将类路径指定为java?

代码语言:javascript
运行
复制
$ java -cp lib/commons-lang-2.4.jar your.main.Class
票数 6
EN

Stack Overflow用户

发布于 2009-11-09 18:46:22

在Eclispe中设置的类路径设置仅适用于IDE,不影响应用程序在IDE之外运行的方式。即使您使用Eclipse功能将应用程序导出为可执行的jar文件,也没有现成的方式来打包应用程序所依赖的所有jar。

如果您已经将应用程序打包到一个名为myapp.jar的jar文件中,那么运行下面这样的命令将使用您所依赖的jar运行应用程序,如果您有多个jar文件,那么只需在;或Unix上的:上添加它们:

代码语言:javascript
运行
复制
java -jar myapp.jar -cp .;c:/pathtolibs/commons-lang-2.4.jar

如果您只是直接运行这些类,那么要么运行包含您的.class文件的文件夹也需要在路径上(尽管我假设它已经运行了,因为您能够运行程序并获得错误)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1702852

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档