java.lang.noclassdeffounderror java.lang.stringbuilder من الكود باستخدام java.lang.stringbuffer
-
28-09-2019 - |
سؤال
أعلم أن هناك الكثير من الأسئلة المتعلقة بهذا الخطأ ، لكنني لم أجد أنه من السهل العثور على واحدة مثل لي تمامًا.
هنا يذهب.
لديّ تطبيق صغير جدًا يكتب بيانات DB إلى ملف CSV ثم يقوم بتحميله على خادم. لقد قمت بتشغيله على صندوقي المحلي من Eclipse وهو أمر رائع ، ولكن يجب تشغيل الإصدار النهائي كوظيفة cron على مربع الخادم من سطر الأوامر.
أنا أعمل على دعوة سطر الأوامر لفئة Java الرئيسية وإعطائي الكثير من المتاعب.
هيكل التبعية الخاص بي على هذا النحو: فصولي
- حزمة = gtechreconcile
- الفصول = gtechreconciler.java ، csvfile.java ، querymachine.java ، ftpsender.java
لي بيبس الخارجي
- OJDBC14.zip
- EDTFTPJ.JAR
أقوم بتشغيل السطر التالي في المحطة في الدليل أعلى حزمة مصدر الترجمة (أي/مسار/إلى/الفئات حيث/إلى/إلى/الفئات/gtechreconcile/يحتوي على جميع ملفات الفئة المترجمة) هذا المسار هو الدليل الحالي عند الأمر يتم تشغيل الخط:
java -cp /<snip>/lib/ojdbc14.zip:/<snip>/lib/edtftpj.jar:/path/to/classes gtechReconcile.GtechReconciler
ثم يخبرني الخطأ أنه لا يمكن العثور على java.lang.stringBuilder ، على الرغم من أن هذا غير موجود في الكود الخاص بي. يمكنني استخدام StringBuffer ، والذي يبدو أنه تم استبدال StringBuilder منذ Java5. ربما قام برنامج التحويل البرمجي Java بتحويل هذا إلى StringBuilder ، والذي لا يحل JVM؟
ماذا أفتقد هنا؟
تحرير: خطأ إضافي من مطالبة (موضحة من أين ينفذ هذا وما هو موجود في مجلد الحزمة):
[gtechReconcile]$ pwd
/path/to/
[gtechReconcile]$ cd classes/gtechReconcile/
[gtechReconcile]$ ls
CSVFile.class FTPSender.class GtechReconciler.class QueryMachine.class reports
[gtechReconcile]$ cd ..
[classes]$ ls
gtechReconcile
[classes]$ java -cp .:/path/to/lib/ojdbc14.zip:/path/to/lib/edtftpj.jar gtechReconcile.GtechReconciler
Creating file
Exception in thread "main" java.lang.NoClassDefFoundError: while resolving class: gtechReconcile.CSVFile
at java.lang.VMClassLoader.resolveClass(java.lang.Class) (/usr/lib/libgcj.so.5.0.0)
at java.lang.Class.initializeClass() (/usr/lib/libgcj.so.5.0.0)
at gtechReconcile.GtechReconciler.main(java.lang.String[]) (Unknown Source)
Caused by: java.lang.ClassNotFoundException: java.lang.StringBuilder not found in [file:./, file:/opt/mms_tstt2/gtechReconcile/lib/ojdbc14.zip, file:/opt/mms_tstt2/gtechReconcile/lib/edtftpj.jar, file:/usr/share/java/libgcj-3.4.6.jar, file:./, core:/]
at java.net.URLClassLoader.findClass(java.lang.String) (/usr/lib/libgcj.so.5.0.0)
at gnu.gcj.runtime.VMClassLoader.findClass(java.lang.String) (/usr/lib/libgcj.so.5.0.0)
at java.lang.ClassLoader.loadClass(java.lang.String, boolean) (/usr/lib/libgcj.so.5.0.0)
at _Jv_FindClass(_Jv_Utf8Const, java.lang.ClassLoader) (/usr/lib/libgcj.so.5.0.0)
at java.lang.Class.forName(java.lang.String, boolean, java.lang.ClassLoader) (/usr/lib/libgcj.so.5.0.0)
at _Jv_BytecodeVerifier.verify_instructions_0() (/usr/lib/libgcj.so.5.0.0)
at _Jv_VerifyMethod(_Jv_InterpMethod) (/usr/lib/libgcj.so.5.0.0)
at _Jv_PrepareClass(java.lang.Class) (/usr/lib/libgcj.so.5.0.0)
at _Jv_WaitForState(java.lang.Class, int) (/usr/lib/libgcj.so.5.0.0)
at java.lang.VMClassLoader.linkClass0(java.lang.Class) (/usr/lib/libgcj.so.5.0.0)
at java.lang.VMClassLoader.resolveClass(java.lang.Class) (/usr/lib/libgcj.so.5.0.0)
...2 more
المحلول
يتم رفع الاستثناء عند إنشاء سلسلة جديدة في فئة CSVFile. تخبرني Google أنها مشكلة متكررة مع GCJ ، استخدم Sun JVM الرسمية. إنه يحل هذا النوع من المشكلات بشكل عام.
ال gtechReconcile
من المفترض أن يحتوي المجلد على جميع ملفات الفصل في gtechReconcile
حزمة.
على سبيل المثال ، إذا كان لديك /path/to/classes/gtechReconcile/GtechReconciler.class
, ، لديك خياران.
- اذهب إلى
/path/to/classes
, ، أضف إلى classpath الدليل الحالي (.
) و اهربjava
كما فعلت من قبل. - يضيف
/path/to/classes
إلى classpath وركضjava
كما تريد.
نصائح أخرى
إن ClassPath الافتراضي (إذا لم تحدد واحدة) هو الدليل الحالي (".").
ومع ذلك ، إذا قمت بتحديد ClassPath ، فستستخدم Java ذلك بدلاً من الافتراضي ، وبالتالي إزالة الدليل الحالي.
حل مشكلتك بسيط: أضف "الدليل الحالي" إلى مسار الفصل الخاص بك ، مثل:
java -cp .:/<snip>/lib/ojdbc14.zip:/<snip>/lib/edtftpj.jar:/<snip>/bin/ gtechReconcile.GtechReconciler