我编写了一个从 Excel 读取文本的 Java 程序。所以,我导入了一些像这样的jar:
poi-3.10-beta2-20130904.jar
,poi-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
您需要为程序中使用的所有其他 jar/类指定类路径。 例如。 在java类路径中设置多个jar
当您在控制台中从 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答案。
结束了,我改变了做我想做的事情的方式。我使用的是eclipse插件fat jar来打包程序