免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4607 | 回复: 4
打印 上一主题 下一主题

NoClassDefFoundError [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-01-22 19:33 |只看该作者 |倒序浏览
我写了一个程序,代码如下:
manzr.java:

import java.io.IOException;
import java.util.StringTokenizer;

import org.apache.hadoop.conf.Configuration;
public class manzr
{
   public static void main(String [] args)
   {
      Configuration conf=new Configuration();
      System.out.println("123";
   }
}
其以来包:hadoop-0.20.1-core.jar 在当前目录下
编译:javac manzr.java -cp ./hadoop-0.20.1-core.jar  通过
执行:
[root@test1 c4]# java manzr -cp ./hadoop-0.20.1-core.jar:.
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/hadoop/conf/Configuration
        at manzr.main(manzr.java:9)
Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.conf.Configuration
        at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:323)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:26
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:336)
        ... 1 more
可是这个Configuration类名名就在这个hadoop-0.20.1-core.jar 包里
其JAR的部分信息如下:
org/apache/hadoop/util/hash/
bin.tgz
core-default.xml
hdfs-default.xml
mapred-default.xml
org/apache/hadoop/HadoopVersionAnnotation.class
org/apache/hadoop/conf/Configurable.class
org/apache/hadoop/conf/Configuration$1.class
org/apache/hadoop/conf/Configuration$IntegerRanges$Range.class
org/apache/hadoop/conf/Configuration$IntegerRanges.class
org/apache/hadoop/conf/Configuration.class
org/apache/hadoop/conf/Configured.class
org/apache/hadoop/filecache/DistributedCache$CacheStatus.class

不知道怎么回事,

论坛徽章:
0
2 [报告]
发表于 2010-01-22 20:32 |只看该作者
-cpN后面改成
-cp ./XXX.jarCLASSPATH
试试,可能是把CLASSPATH覆盖了

论坛徽章:
0
3 [报告]
发表于 2010-01-22 22:23 |只看该作者
谢谢2L.刚回来,你的答案我还没有试,不过我试验了另外一个方法:
始终没有调通,但是刚才做了如下改动.
1.将hadoop-core-0.20.1.jar 包解开,这个时候,hadoop的org文件夹在当前目录 在执行 java manzr -cp .   出现了另外一个包的某个类文件的 NoClassDefFoundError 问题.
这个时候,我在 -cp 后面,把那个包加了进来,如 -cp .:./lib/****.jar 文件,还是找不到那个类文件.但是我 jar tf 那个包的时候,是可以看到这个类的.
最后没办法,我把所有包都放到了$JAVA_HOME/JRE/LIB/EXT  下面,就没有这个问题了.编译和执行都通过.
现在很迷惑的时,这个现象的原因是什么....

论坛徽章:
0
4 [报告]
发表于 2010-01-23 14:54 |只看该作者
自己顶一下啊,这到底是为什么

论坛徽章:
0
5 [报告]
发表于 2010-01-23 15:42 |只看该作者
经过 与 国宝  `man chenju` 等几位牛牛的讨论.问题初步解决,猜测如下:
在linux 操作系统的前提下:
猜测如下:
1.java与javac不同,对于 -cp 参数.在linux下,两者的包加载方法不同,对于javac,在编译java类的时候,如果出现import等,他会在CLASSPATH,-cp 等参数下 查找这个包文件.
   而对于java,他是按照输入参数的顺序执行的,也就是说,在执行某个类文件的时候,如果指定的-cp 在他前面出现,则加载,如果在后面,则无效.
执行以及输出如下;
[root@test1 c4]# java   -cp .:./*  manzr
123
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP