代码之家  ›  专栏  ›  技术社区  ›  Brian Moeskau

可怕的java.lang.noclassdefoundError

  •  4
  • Brian Moeskau  · 技术社区  · 16 年前

    我已经浏览了许多关于这个错误的现有线索,但仍然没有运气。我甚至没有尝试打包一个罐子或使用任何第三方打包工具。我只是在Eclipse中运行(非常好),然后尝试在命令行的相同位置运行完全相同的应用程序(得到这个错误)。我的目标是能够压缩bin文件夹,然后通过命令行脚本将其发送给其他人运行。一些细节:

    • 这是一个命令行应用程序,我正在使用commons-lang-2.4.jar作为字符串实用程序。这是找不到的文件(specificaly“java.lang.noclassdefounderror:org/apache/commons/lang/stringsescapeutils”)。
    • 我在lib文件夹中有这个jar,并通过右键单击“构建路径->添加到构建路径”将其添加到Eclipse中的构建路径中。
    • .classpath文件看起来是正确的,包含对jar的引用,但我假设该文件仅由eclipse使用(包含以下行: <classpathentry kind="lib" path="lib/commons-lang-2.4.jar"/> )
    • 这是否与Eclipse工作目录设置相关?我在src/templates下创建了一些内部模板文件,唯一能看到这些文件的方法是将项目工作目录设置为appname/src。也许我应该把它们放在别的地方?

    如果有其他信息可以帮助我,请告诉我。当然这很简单,但我在这一点上浪费了太多时间。这就提醒了我为什么当初在05年左右离开Java。

    7 回复  |  直到 7 年前
        1
  •  13
  •   BalusC    16 年前

    NoClassDefFoundError 基本上意味着类在编译期间就在类路径中,但在运行时类路径中却缺少它。

    在您的情况下,执行时使用 java.exe 在命令行中,需要在 -cp -classpath 争论。或者,如果它是JAR文件,则需要在 class-path 进入 MANIFEST.MF 文件。

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

    java -cp .;c:/path/to/file.jar;"c:/spacy path/to/classes" mypackage.MyClass
    

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

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

    java -cp .:/path/to/file.jar:"/spacy path/to/classes" mypackage.MyClass
    
        2
  •  6
  •   Pang Ajmal PraveeN    7 年前

    在命令行中指定Java的类路径吗?

    $ java -cp lib/commons-lang-2.4.jar your.main.Class
    
        3
  •  2
  •   Tendayi Mawushe    16 年前

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

    如果您已经将应用程序打包到一个名为 myapp.jar 然后运行下面这样的命令将使用您所依赖的jar运行应用程序,如果您有多个jar,只需将它们分别添加到 ; 在Windows或 : 在UNIX上:

    java -jar myapp.jar -cp .;c:/pathtolibs/commons-lang-2.4.jar
    

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

        4
  •  1
  •   Thorbjørn Ravn Andersen    16 年前

    考虑使用file->export->runnable jar创建一个jar文件,可以直接用

    java -jar yourProgram.jar
    

    根据您的需要,有几种变体。

        5
  •  0
  •   Community Mohan Dere    8 年前

    Eclipse不会将类路径中的任何jar移动到项目的bin文件夹中。您需要将UTIL JAR复制到bin文件夹中。如果您将它移到bin文件夹的根目录,您可能可以在没有任何类路径条目的情况下离开,但这不是推荐的解决方案。看@ BalusC answer 为了更好地覆盖这一点。

        6
  •  0
  •   fijiaaron    14 年前

    Eclipse在默认情况下不生成可执行Java类。不要问我为什么,但这可能与使用他们自己的tools.jar(plugins/org.eclipse.core中的某个地方)有关。这样Eclipse就可以在没有JDK的情况下运行。

    您通常可以转到项目bin目录并执行以下操作:

    java -cp . MyClass
    

    但是如果您有外部jar,Eclipse会以另一种奇怪的方式在内部处理这些jar,因此您也需要添加这些jar。

        7
  •  0
  •   javaW3st    11 年前

    确保你的罐子 commons-lang-2.4.jar 在课堂上而不是还原。

    我曾经在类路径中添加JAR文件,在类路径中有2个JAR文件。删除后,工作顺利

    推荐文章