1

我在文件中使用外部 jar 时遇到问题。我总是得到:

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

这个文件在类路径上,我在运行 jar 时设置选项:

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

调用此命令后,此文件编译成功:

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

该怎么办?

4

3 回答 3

2

如果类加载器无法初始化类的静态成员,JVM 将抛出 java.lang.NoClassDefFoundError,例如抛出异常。或者,如果它找不到另一个由此类中的静态初始化程序访问的类。这看起来像正在发生的事情,当类加载器加载 HBaseConfiguraton 时,这个类 HBaseConfiguration 期望它无法获得导致异常的东西,即丢失。
调试这种故障时运气不好。

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

于 2010-08-17T19:38:22.723 回答
0

我的问题是我正在使用-classpath选项设置类路径并运行 jar,这导致该-classpath选项被忽略。

我已经在清单文件中添加了 jar,这很有效。

这是类似的问题:Setting multiple jars in java classpath

于 2010-09-15T08:12:45.787 回答
0

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

java -cp "myclasspath":myjarfile.jar MyClassname
于 2015-08-20T01:19:37.037 回答