JDK配置:java.lang.NoClassDefFoundError异常

来源:互联网 发布:crm php源码 编辑:程序博客网 时间:2024/04/28 10:56

最近想用java做点东西,配置好jdk后,还是出现下面的异常:

Exception   in   thread   "main "   java.lang.NoClassDefFoundError

网上搜索了很多,发现基本上是说路径配置不对。

 

写完一个hello程序后,

开始编译:javac hello.java

运行:java hello

Exception   in   thread   "main "   java.lang.NoClassDefFoundError

 

难道路径不对吗,瞎折腾了很久,还试了加上jre的路径到环境变量,重新启动电脑,都没用。

 

 

我的配置如下:

JAVA_HOME -             C:/Program Files (x86)/Java/jdk1.6.0_17

CLASSPATH  -              .;C:/Program Files (x86)/Java/jdk1.6.0_17/lib

在PATH变量最后加上 ;C:/Program Files (x86)/Java/jdk1.6.0_17/bin

没问题吧

 

 

网上的东西真是没几个准,最后发现自己的hello.java中使用了自定义包:pacakge com.hf.test,

才怀疑是包在作怪,终于搜索到一篇文章http://topic.csdn.net/t/20050708/12/4131400.html,其中12楼的回答

基本解决了我的问题,有兴趣的可以参考下。

 

下面是我的解答步骤:

 

我的当前路径是d:/java, hello.java放在d:/java/com/hf/test下面,

编译: javac com/hf/test/hello.jva

运行: java com.hf.test.hello

OK

 

然后我将它又打包成jar文件,这里将编译的class文件归到一起,所以采用如下步骤:

当前路径还是d:/java

创建clsses目录: mkdir classes

编译: javac -d classes com/hf/test/hello.jva // -d 指定编译出的class文件输出到classes目录中

运行:cd classes //cd到classes目录下运行

java com.hf.test.hello

OK

 

打jar包:

cd到classes目录下,用记事本创建一个manifest文件,内容 如下,保存时注意选择文件类型为*.*, 名字可自定义。

Manifest-Version:   1.0
Main-Class: com.hf.test.hello
Created-By:   1.2.2   (Sun   Microsystems   Inc.)

 

这是主要是要指定Main-Class,其它的没啥关系,这里指定你的main()方法所在类的完整路径: com.hf.test.hello

 

可惜的是,直接copy参考的那篇文章的manifest是会出问题的,照样出同样的异常。后来发现,

原来Main-Class: 这一行格式不对,真是折腾啊

原因是Main-Class: 后需要空一格,再加上类的路径。多一个tab格也会出问题的,真晕!

 

好了,然后开始打包:

cd classes

jar -cvfm my.jar manifest com/hf/test

这样,jar包就打好了

执行:java -jar my.jar

ok

 

如果你的jar包是被其它程序使用,可以用java命令的-cp参数导入。

 

到此,一切o了

 

总结:一个简单的问题,却很折腾人,网上的东西五花八门,真正是自己思考的太少了。

为避免自己以后忘掉,作此。欢迎指教。

 

 

原创粉丝点击