我在我的文件中使用外部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
怎么办?
答案 0 :(得分:2)
如果类加载器无法初始化类的静态成员,则JVM将抛出java.lang.NoClassDefFoundError,例如抛出异常。或者,如果它找不到此类中的静态初始化程序访问的另一个类。这看起来就像正在发生的事情,当类加载器厌倦了加载HBaseConfiguraton时,这个类HBaseConfiguration期望它能够获得导致异常的东西,这就是丢失了。
运气好,调试这种失败。
编辑:
找出缺失的最简单的方法是在调试器中启动程序,连接所有HBase源,比如在Eclipse下,并跟踪HBaseConfiguration.create()
调用。
答案 1 :(得分:0)
我的问题是我使用-classpath
选项并运行jar来设置classpath,这会导致-classpath
选项被忽略。
我在清单文件中添加了jar,这可行。
答案 2 :(得分:0)
如果java在这种情况下给我们一个错误或者至少有一个警告,那将非常方便。我相信一个解决方案是像这样执行你的jar
java -cp "myclasspath":myjarfile.jar MyClassname