用java -cp命令在linux下执行jar文件里的主类(含main函数),报错,求解。

包名叫cmpp.jar,里面的含有主类的包名和类名为:com.aspire.nm.zjshare.test.TestDate.class。
传到linux上以后,在cmpp.jar的所在路径下,执行该命令:
java -cp cmpp.jar com.aspire.nm.zjshare.test.Demo30, 报错如下:
Exception in thread "main" java.lang.NoClassDefFoundError: com/aspire/nm/zjshare/test/TestDate
Caused by: java.lang.ClassNotFoundException: com.aspire.nm.zjshare.test.TestDate

第1个回答  2013-07-14
一楼正解,-cp用来class path,就是需要用到的别的jar的位置本回答被网友采纳
第2个回答  2013-06-30
不用用-cp, 有运行jar的-jar吧?或者jar 加什么,你想你要的库和主方法都在一个jar里,一般用不到-cp吧,除非你用到别的类库不在jar里。追问

jar --help看了下,好像没有运行的命令?能不能再详细说一下,比如我就要运行cmpp.jar里面的含有主类的com.aspire.nm.zjshare.test.TestDate.class,用jar命令如何运行?

追答

你等下我试试,原来我都把那句写成过shell的batch文件的。

就java -jar cmpp.jar就行。
当然你得会打Runnable的jar 包。 手动往里填也行。具体做法是在.jar包里的根目录下填加元信息数据包META-INF,内含文件MANIFEST.MF。内容为:
Manifest-Version: 1.0
Class-Path: .
Main-Class: com.xxx.xxx.Main
来指定cp 和mainclass.

追问

运行了ava -jar cmpp.jar
报错:Invalid or corrupt jarfile cmpp.jar
我是用winrar打的jar包,确定把它打的是zip文件,不是rar文件。

哦,我再试下这个手动往里添加MANIFEST.MF文件的方法。记得以前用过java -cp的方法运行文件,好像也没啥manifest文件这说,不知你是否清楚?

追答

你填下mainfest.mf,完了就对了。打成zip是对的,打成rar出invalid or corrupt jarfile
凡是.jar file, 必须有META-INF/mainfest.mf, 否则也会是invalid or corruct jarfile. 你可以试试,没填META-INF/mainfest.mf用zip打包,不管怎么运行,都一样是invalid or corrupt jarfile. 填了META-INF/mainfest.mf,里面可以不填内容,就是空内容。可以用你的命令运行成功,就是java -cp xxx.jar com.xxx.xxx.Main这样形式。

建议还是不要用rar打包,用jar命令打包,jar cf xxx.jar [文件夹名]

追问

我先是只写了manifest.mf文件,但没放在META-INF里,但是结果放里面还是报invalid or corrupt jarfile。。有点小无奈。刚试了一下 jar cf 但目前只会将一个class文件打包进jar文件里,如果它嵌入到多级文件夹里,也不知道怎么弄了。

追答

写最最外层文件夹名啊。当然java文件里最上面的package是要写清楚的。

追问

我现在用eclipse的export打包,成功打出了jar包。但是在java cf xxx.jar运行时报错java.lang.NoClassDefFoundError: org/apache/log4j/Logger。怎么能在运行时把需要的jar包类库都加上?

追答

导出Runnable的jar包。

三个选项,各有各的意思,自己读英文。

本回答被提问者采纳
第3个回答  2015-07-29
报什么错?
相似回答