用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
报什么错?

如何用javac 和java 编译运行整个Java工程
一 javac命令javac 用于编译Java文件 格式为 java [options] [sourcefiles] [@files]其中 options 命令行选项 sourcefiles 一个或多个要编译的源文件 @files 一个或多个对源文件进行列表的文件 有时候要编译的文件很多 一个个敲命令会显得很长 也不方便修改 可以把要编译的源文件列在文件中 在...

编译java程序需要使用java命令
1、打开cmd,进入到.Java文件所在的文件夹下。由于我的源文件在D盘的JAVA文件夹下,所以我要先进入D盘(输入d:回车)。2、进入D盘后,再进入到JAVA文件夹。输入cdjAVA后,按下回车键即可。3、输入javacrandom.java命令,并按下回车键,进行程序的编译。4、这样就编译完成了。可以看到存放java文件的目...

怎样打开java文件
3、命令行工具 使用命令行工具,如命令提示符(Windows)或终端(Mac或Linux),可以通过执行命令来打开Jar文件。例如,使用Java命令来运行Jar文件中的可执行程序或类文件。4、Java虚拟机 作为Java的核心组件,Java虚拟机(JVM)可以直接运行Jar文件。用户可以使用命令行或图形界面工具来启动Java虚拟机,并指...

用jdk运行java程序
详情请查看视频回答

如何学习JAVA
Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种...

如何正确掌握Java的学习方法?
我们可以利用现成的类、组件、框架来搭建我们的应用,如SUN公司编写好了众多类实现一些底层功能,以及我们下载过来的JAR文件中包含的类,我们可以调用类中的方法来完成某些功能或继承它。那么这些类中究竟提供了哪些方法给我们使用?方法的参数个数及类型是?类的构造器需不需要参数?总不可能SUN公司的工程师打国际长途甚至...

如何在电脑中运行JAVA程序
public static void main(String[] args){ System.out.println("Hello world!");} } 将程式保存为文档名为HelloWorld.java的文档。打开命令提示符窗口,进入到HelloWorld.java所在目录,键入下面的命令 javac HelloWorld.java java HelloWorld 此时若打印出来HelloWorld则安装成功,若没有打印出这句话,...

JAVA的编译器怎么用
其次如果你把JDK的安装目录下的bin文件夹的路径添加到Path环境变量的话,那么进入命令提示符(运行对话框里输入cmd就可以进入命令提示符),输入:“java【空格】 类名”就可以看到类似C语言运行的效果,当然,那个类要有main方法,还有就是你输入:“java【空格】 类名”之前,还需要在命令提示符里先...

用java编写一个程序?
Java是一门计算机编程语言,面向对象的编程语言。Java可以开发后端,有spring,springmvc,springboot,springcould等等都是使用Java开发。Java也有前端框架,有Jquery,JavaScript,JSP,Servlet,统称JavaWEB开发。使用Java编写一个程序很简单,按照相关的模板,加上业务代码就可以实现一套系统。

java 的用途有那些?
它是一种通过解释方式来执行的语言,语法规则和C++类似。同时,Java也是一种跨平台的程序设计语言。用Java语言编写的程序叫做“Applet”(小应用程序),用编译器将它编译成类文件后,将它存在WWW页面中,并在HTML档上作好相应标记,用户端只要装上Java的客户软件就可以在网上直接运行“Applet”。 Java非常适合于企业网络和...

相似回答