NoClassDefFoundError,在同一目录中为什么程序找不到jar

时间:2013-10-06 12:25:27

标签: java eclipse maven apache-poi

我编写了一个从excel读取文本的Java程序。所以我导入了一些这样的jar:poi-3.10-beta2-20130904.jarpoi-ooxml-3.10-beta2-20130904.jar等,我可以在eclipse中正确运行程序。但是当我用maven将这个程序打包到目录(C:\workspace2\change\bin

然后我按照这样的命令运行这个程序:

C:\workspace2\change\bin>java GenerateVar

发生此错误:

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/poi/ss/usermodel/Cell
    at GenerateVar.execute(GenerateVar.java:59)
    at GenerateVar.main(GenerateVar.java:25)
Caused by: java.lang.ClassNotFoundException: org.apache.poi.ss.usermodel.Cell
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    ... 2 more

3 个答案:

答案 0 :(得分:0)

当你在控制台中从eclipse运行它时,有一个可用于运行项目的命令,你可以将它从控制台复制/粘贴到你的命令行。

在命令java GenerateVar中,您没有设置-cp选项。使用此选项,命令行将类似于

java -cp poi-3.10-beta2-20130904.jar poi-ooxml-3.10-beta2-20130904.jar ... GenerateVar

假设图书馆在当前目录中。

如何使用maven插件为您的项目添加依赖项并构建jar,您可以找到here

如果您想手动修改manifest.mf,请参阅this

答案 1 :(得分:0)

您需要为程序中使用的所有其他jar /类指定classpath。 例如。 Setting multiple jars in java classpath

答案 2 :(得分:0)

结束了,我改变了做我想做的事情。我使用fat jar作为eclipse插件来打包程序