【问题标题】:External jars & HBase in classpath类路径中的外部 jar 和 HBase
【发布时间】:2011-03-30 23:05:01
【问题描述】:

我在文件中使用外部 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

怎么办?

【问题讨论】:

    标签: java jar classpath hbase


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      java -cp "myclasspath":myjarfile.jar MyClassname
      

      【讨论】:

        【解决方案3】:

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

        我已经在清单文件中添加了 jars 并且这有效。

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

        【讨论】:

          猜你喜欢
          • 2011-08-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-07-16
          • 2016-09-04
          • 2015-11-18
          • 2014-02-03
          • 1970-01-01
          相关资源
          最近更新 更多