我已经浏览了许多有关此错误的现有主题,但仍然没有运气。我甚至没有尝试打包或使用任何第三方包装工具。我只是在Eclipse中运行(效果很好),然后尝试从命令行运行完全相同的应用程序,在它构建的相同位置(获得此错误)。我的目标是能够压缩bin文件夹并将其发送给其他人通过命令行脚本运行。一些细节:
<classpathentry kind="lib" path="lib/commons-lang-2.4.jar"/>
)如果有任何其他信息有帮助,请告诉我。当然这很简单,但我现在浪费了太多时间。这让我想起为什么我最初在05年左右离开了Java ......
答案 0 :(得分:13)
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
答案 1 :(得分:6)
您是否在命令行中指定了java的类路径?
$ java -cp lib/commons-lang-2.4.jar your.main.Class
答案 2 :(得分:2)
您在Eclispe中设置的类路径设置仅适用于IDE,不会影响您在IDE外部运行应用程序的方式。即使您使用Eclipse功能将应用程序导出为可执行jar文件,也没有开箱即用的方法来打包应用程序所依赖的所有jar文件。
如果您已将应用程序打包到名为myapp.jar
的jar文件中,那么运行如下命令将运行您依赖的jar的应用程序,如果您有多个,只需添加它们{{1在Windows上或在Unix上的;
:
:
如果你只是直接运行这些类,那么运行包含你的java -jar myapp.jar -cp .;c:/pathtolibs/commons-lang-2.4.jar
文件的文件夹也需要在路径上(虽然我认为它已经是因为你能够运行程序并获得错误)。
答案 3 :(得分:1)
考虑文件 - &gt;出口 - &gt; Runnable jar创建一个可以用
直接调用的jar文件java -jar yourProgram.jar
根据您的需要,有几种变体。
答案 4 :(得分:0)
Eclipse不会将类路径中的任何jar移动到项目的bin文件夹中。您需要将util jar复制到bin文件夹中。如果将其移动到bin文件夹的根目录,则可以在没有任何类路径条目的情况下离开,但这不是推荐的解决方案。请参阅@ BalusC的answer以获得对此的良好报道。
答案 5 :(得分:0)
默认情况下,Eclipse不构建可执行的java类。不要问我为什么,但它可能与使用自己的tools.jar(在plugins / org.eclipse.core中的某个地方?)有关,这样Eclipse就可以在没有JDK的情况下运行。
您通常可以转到项目bin目录并执行:
java -cp . MyClass
但是如果你有外部jar,Eclipse会以另一种奇怪的方式在内部处理它们,所以你也需要添加它们。
答案 6 :(得分:0)
确保你的jar commons-lang-2.4.jar
在类路径中而不是减少。
我曾经将jar文件添加到我的类路径中,并且在我的类路径中有2个文件jar。删除后,工作顺利