java.lang.noclassdeffounderror java.lang.stringbuilder من الكود باستخدام java.lang.stringbuffer

StackOverflow https://stackoverflow.com/questions/3086750

سؤال

أعلم أن هناك الكثير من الأسئلة المتعلقة بهذا الخطأ ، لكنني لم أجد أنه من السهل العثور على واحدة مثل لي تمامًا.

هنا يذهب.

لديّ تطبيق صغير جدًا يكتب بيانات 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, ، لديك خياران.

  1. اذهب إلى /path/to/classes, ، أضف إلى classpath الدليل الحالي (.) و اهرب java كما فعلت من قبل.
  2. يضيف /path/to/classes إلى classpath وركض java كما تريد.

نصائح أخرى

إن ClassPath الافتراضي (إذا لم تحدد واحدة) هو الدليل الحالي (".").

ومع ذلك ، إذا قمت بتحديد ClassPath ، فستستخدم Java ذلك بدلاً من الافتراضي ، وبالتالي إزالة الدليل الحالي.

حل مشكلتك بسيط: أضف "الدليل الحالي" إلى مسار الفصل الخاص بك ، مثل:

java -cp .:/<snip>/lib/ojdbc14.zip:/<snip>/lib/edtftpj.jar:/<snip>/bin/ gtechReconcile.GtechReconciler
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top