غريب الربيع السلوك على رصيف عندما spring.jar هو في ويب-INF/lib/ بدلا من classpath

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

  •  05-07-2019
  •  | 
  •  

سؤال

أنا على التوالي الكسوف مع تشغيل رصيف-تشغيل البرنامج المساعد لإطلاق بلدي J2EE تطبيقات الويب.المشروع يستخدم الربيع و الربيع التكوين يستخدم أشياء مثل HttpInvokerProxy و خصائص العنصر النائب.

  1. عندما ربيع الجرار على classpath (يعني تم تكوينها في "classpath" من علامة التبويب "تشغيل التكوين") والخارجية (في WEB-INF/lib), كل شيء يعمل بشكل جيد.
  2. ولكن عندما وضع spring.jar (أو كل ربيع الجرار) في شبكة الإنترنت-INF/lib/ الدليل (+المشار إليها في classpath) ، تبدأ المتاعب.حاولت مع كل القيم جيتي هو parentLoaderPriority:
    1. عندما parentLoaderPriority هو true, أنا الحصول على شكوى من Xerces قائلا انه لا يمكن التحقق من صحة spring.xml's XSD (لذا أعتقد رصيف جزءا لا يتجزأ من نسخة مختلفة من xerces متضاربة مع الألغام)
    2. عندما parentLoaderPriority هو false, مكان الإقامة نائبا لا يعمل بعد الآن (حاولت مع استبدال المباشر القيم) الربيع أيضا فشل في تحويل HttpInvokerProxy في الصحيح واجهة مثل بعض الطبقات هي في عداد المفقودين
  3. وأخيرا ، عندما تترك كل الجرار في ويب-INF/lib وإزالة مطابقة classpath إدخالات أنه لا يمكن العثور على فصول:أحصل على ClassDefNotFoundException com/جوجل/common/جمع/القوائم على الرغم من google-collections.jar هو في ويب-INF/lib و يحتوي على ملف فئة...هذا مع كل القيم parentLoaderPriority.

الأسلوب #3 يعمل بشكل جيد في هر ، على الرغم من.لذا أعتقد أن هذا رصيف قاذفة لديه بعض classloading التكوين أفعله خطأ ؟

هل كانت مفيدة؟

المحلول

يبدو التطبيق الخاص بك باستخدام شيء على 'الخارجية' classpath (سأتصل X) ويمر عليه المرجعية ؛ هذا يعمل على ما يرام لأن 'الخارجية' هو في الأصل classloader إلى التطبيق الخاص بك.

'X' ثم يستخدم الإشارة أن تفعل شيئا مع الربيع.إلا أن الربيع هو على التطبيق الخاص بك classpath ، ولكن X الخارجية classpath.الربيع ولذلك لا مرئي إلى العاشر ، وبالتالي الخطأ.

كما يمكنك اكتشاف وضع الربيع في الخارجية classpath صحة الحل.وهذا أيضا ينبغي أن تعمل إذا فصل الربيع في كل من الخارجية على شبكة الإنترنت التطبيق classpaths.

ما 'X' ؟ المرشح الأكثر ترجيحا سيكون العموم-قطع الأشجار التي لديها تاريخ طويل من العبث مع classloaders.قد ترغب في النظر في استخدام slf4j التنفيذ بدلا من ذلك (مثل Logback) وتوفير العموم تسجيل واجهة طريق jcl-أكثر-slf4j

الموارد:

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top