包名叫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
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包。
三个选项,各有各的意思,自己读英文。