java.lang.NoClassDefFoundError。在运行时期间找不到类。

时间:2013-04-23 16:12:04

标签: java noclassdeffounderror

我正在研究eclipse,我需要使用外部库。例如Jsoup和JXL。

到目前为止我所做的是:首先在我的项目文件夹中创建一个“lib”文件夹。然后在eclipse中,单击项目属性,Libraries选项卡,添加外部jar并在lib文件夹中添加jar。

所以这解决了我的编译问题。现在,当我运行程序时(我转到project / bin并在控制台中执行:java ProgramName;我得到

java.lang.NoClassDefFoundError: 

现在进行测试,我将Jar文件添加到Main.java所在的文件夹中。现在,我已经能够运行该程序,执行以下操作:

javac -classpath ./path/to/jar Main.java
java -classpath ./path/to/jar:. Main  

这很有效。

所以首先想到的是我必须告诉java在哪里找到相应的库。如果这是正确的?我该怎么做?

java -cp ???(dont know what to put here)

但此外。我有另一个问题。我正在计算机上编写这个程序,但是我会在其他可能没有这些库的地方使用它。我该如何解决这个问题?

3 个答案:

答案 0 :(得分:0)

我喜欢使用以下内容:

java -cp myjar.jar;lib/*.jar com.foo.bar.MyClass

这不仅可以将我的jar添加到类路径中,还可以添加lib目录中的jar。

如果你想在另一台电脑上运行你的jar,你 也需要那些罐子,你不能拿到你的罐子。为什么不直接打包你的lib目录呢?

答案 1 :(得分:0)

要让程序运行,您需要担心两个路径

  1. 作为应用程序依赖项的jar文件的路径(如jsoup.jar)(让我们称之为lib)
  2. 包含应用类的目录的路径(让我们调用此类)
  3. 您需要的命令行的一般形式是:

    java -cp lib/jsoup.jar:classes Main
    

    如果你有更多的libs

    java -cp lib/jsoup.jar:lib/jxl.jar:classes Main
    

    关于将您的应用打包到其他计算机的一般说明。您可能需要考虑制作一个自己的应用程序罐,可能最好使用http://ant.apache.org/manual/Tasks/jar.html

    另一种选择是生成一个“一个jar”,它创建一个大型jar,捆绑所需的所有类,从libs和应用程序中的所有类。然后,您可以使jar可执行以获得开箱即用的解决方案。请查看http://one-jar.sourceforge.net/https://code.google.com/p/jarjar/

答案 2 :(得分:0)

如果你有这个结构:

project folder
... code
... libs

然后从代码文件夹:

javac -cp .;../libs/*.jar yourmainclass.java
java -cp  .;../libs/*.jar yourmainclass

当您需要编译并运行此项目时,请获取所有文件夹并在其他计算机中执行相同的操作。