2010-08-17 60 views
1

我有问题在我的文件中使用外部罐子。我总是得到:外部罐和HBase类路径

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/hadoop/hbase/HBaseConfiguration` 
at this line: `Configuration config = HBaseConfiguration.create(); 

而且这个文件是在类路径中,运行罐子当我设置选项:

$ javac -classpath "/usr/lib/hbase/*:/usr/lib/hadoop/*" HBaseScanner.java 
:调用此命令后

$ java -jar hbase.jar -classpath "/usr/lib/hbase/*:/usr/lib/hadoop/*" 

该文件编译成功

该怎么办?

回答

0

我的问题是,我使用-classpath选项和运行jar设置classpath,导致-classpath选项被忽略。

我已经在清单文件中添加了jar,并且可以正常工作。

这是同样的问题:Setting multiple jars in java classpath

2

如果类加载器无法初始化类的静态成员(比如抛出异常),JVM将抛出java.lang.NoClassDefFoundError。或者,如果它找不到此类中的静态初始化程序访问的另一个类。这看起来像是发生了什么事情,当类加载程序轮胎加载HBaseConfiguraton时,这个类HBaseConfiguration期望它的大炮得到的东西导致异常,这是失去了。
艰难的运气调试这种失败。

编辑: 找出缺失的最简单方法是在调试器中启动该程序,并在所有HBase源连接(例如在Eclipse下)并跟踪HBaseConfiguration.create()调用。

0

这将是非常方便的,如果Java的给了我们一个错误或者至少在这种情况下警告。我相信一种解决方案就是像这样执行你的罐子

java -cp "myclasspath":myjarfile.jar MyClassname