الجرار الخارجية و hbase في classpath
سؤال
أواجه مشكلة في استخدام الجرار الخارجية في ملفي. أحصل دائما:
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/hadoop/hbase/HBaseConfiguration`
at this line: `Configuration config = HBaseConfiguration.create();
وهذا الملف موجودًا على classpath ، أقوم بإعداد خيارات عند تشغيل الجرة:
$ java -jar hbase.jar -classpath "/usr/lib/hbase/*:/usr/lib/hadoop/*"
يجمع هذا الملف بنجاح بعد استدعاء هذا الأمر:
$ javac -classpath "/usr/lib/hbase/*:/usr/lib/hadoop/*" HBaseScanner.java
ماذا أفعل؟
المحلول 3
كانت مشكلتي هي أنني كنت أستخدم classpath -classpath
الخيار وجرة التشغيل ، والتي تسبب -classpath
خيار لتجاهله.
لقد أضفت الجرار في ملف واضح وهذا يعمل.
هذه مشكلة مماثلة: وضع جرار متعددة في Java ClassPath
نصائح أخرى
سوف JVM رمي java.lang.noclassdeffounderror إذا لم يتمكن محمل الفصل من تهيئة الأعضاء الثابتة في الفصل ، يقول أنه يتم طرح استثناء. أو إذا لم تتمكن من العثور على فئة أخرى يمكن الوصول إليها بواسطة مُعمى ثابت في هذه الفئة. يبدو أن هذا ما يحدث ، عندما تتوقع إطارات Loader Class تحميل HbaseConfiguraton ، هذا الفصل الدراسي الذي يحصل عليه المدفع الذي يؤدي إلى استثناء ، يتم فقدانه.
حظ صعب تصحيح هذا النوع من الإخفاقات.
تحرير: أسهل طريقة لمعرفة ما هو مفقود هي إطلاق البرنامج في مصحح تصحيح مع جميع مصادر HBase متصلة ، على سبيل المثال تحت Eclipse ، وتتبع HBaseConfiguration.create()
مكالمة.
سيكون من السهل حقًا أن يعطينا جافا خطأ أو على الأقل تحذير في هذا الموقف. أعتقد أن أحد الحلول هو تنفيذ جرة مثل هذا
java -cp "myclasspath":myjarfile.jar MyClassname