سؤال

أواجه مشكلة في استخدام الجرار الخارجية في ملفي. أحصل دائما:

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
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top