سؤال

ملخص

هو أن من الممكن webapps نشر على لينكس + tomcat5.5 استخدام/شاهد /usr/share/java/ الجرار تلقائيا ؟

التفاصيل

انا التعبئة والتغليف بلدي جافا webapp أوبونتو (ولكن السؤال هو إلى أي القائمة على نظام لينكس توزيعة) و الذهاب الى جعلها تعتمد على القط.

انا ذاهب الى وضع إطار واصف (ملف xml) إلى /usr/share/tomcat5.5/conf/Catalina/localhost/ لجعل بلدي التطبيق نشرها.وجود my web dir هنا: /usr/share/<appname>/web, كيف يمكنني تمكين التطبيقات لاستخدام جافا جرة يبس المثبتة في النظام (/usr/share/java)?

لا أستطيع الارتباط الرمزي /usr/share/java -> <webdir>/WEB-INF/lib, منذ لدي مخصص الجرار تحتاج إلى أن توضع في lib dir.

سيئة الحل

الحل لقد وجدت حتى الآن هو أن الارتباط الرمزي كل جرة المطلوبة إلى <webdir>/WEB-INF/lib/.

هذه ليست جيدة جدا لأنه يجب أن الارتباط الرمزي الكثير من الجرار والأسوأ من ذلك أن الارتباط الرمزي جميع الجرار مباشرة التبعية lib (جرة) يتطلب (وهلم جرا).في الحالة مباشر التبعية lib التغييرات قائمة المطلوبة الجرار سوف يكون للحفاظ على روابط الرمزية.

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

المحلول

يجب أن لا تفعل ذلك.Java EE التطبيقات هي من المفترض أن تكون الاكتفاء الذاتي وعدم الاعتماد على أي موارد خارج بنشر مجموعة أخرى من تلك التي توفرها الحاوية.لذلك يجب أن تأخذ يبس عليك من هذا الدليل إضافة إلى الحرب أو الأذن الحزمة.

هذا يضمن أن التطبيق الخاص بك سوف تتصرف بنفس أينما كنت في نشرها أنك لن تتعرض إلى تغييرات غير متوقعة في إصدارات يبس في /usr/share/java....

نصائح أخرى

وفقا هر classloading الوثائق, تحتاج إلى وضع أي مشترك يبس التي ينبغي أن تكون متاحة لجميع هر التطبيقات في $CATALINA_BASE/مشترك/lib مكتبات-حتى طريقة واحدة أن تفعل ما كنت تبحث القيام به هو التحرك الخاص بك من المكتبات /usr/share/java دولار CATALINA_BASE/مشترك/lib.

ولكن إذا لم أكن سوء الفهم نفس الوثائق ، هر أيضا يجعل المنظومة CLASSPATH متغير محتويات المتاحة classloader على الاطلاق ، حتى إذا كان الدليل الخاص بك -- /usr/share/java -- أدرجت في نطاق المنظومة CLASSPATH متغير, ثم ينبغي أن تعمل أيضا.أنا لم أفعل هذا ، على الرغم ؛ هر طريقة صنع محتويات $CATALINA_BASE/مشترك/lib المتاحة هر نطاق دائما تقدم لي تماما.

entzik الجواب يؤدي بي إلى الحل التالي.

انا ذاهب الى استخدام تعديل "الحلول السيئة" (انظر السؤال).

التعديلات التالية:

  1. تعتمد على حزمة محددة نسخة عن كل التبعيات (يؤثر على "السيطرة" الملف أثناء التعبئة والتغليف ديب)
    على سبيل المثال: libcommons-io-جافا ( = 1.3.1) بدلا من مجرد libcommons-io-جافا
  2. الارتباط الرمزي الفعلية جرة الملفات في/usr/share/جافا` وليس "المعمم" منها
    على سبيل المثال:
    webdir/WEB-INF/lib/commons-io.jar -> /usr/share/java/commons-io-1.3.1.jar
    و لا
    webdir/WEB-INF/lib/commons-io.jar -> /usr/share/java/commons-io.jar

هذه التعديلات تضمن webapp لم ينكسر إذا كان المسؤول تثبيت نسخة جديدة من مكتبة (العموم-io على سبيل المثال).

الجانب السلبي هو أن هذا النهج بوضوح يضخم النظام مع استخدام-من قبل-فقط-واحد-التطبيق إصدارات المكتبات قد يؤدي إلى مشكلة بعض التطبيقات الأخرى/المكتبة لا يمكن تثبيت بسبب تعارض الإصدار.اعتقد كل المشاكل المحتملة طفيفة إذا أردنا الحديث عن المكتبات.

لديك خياران واحد هو السماح classloader توفر المكتبات لجميع برامج جافا وغيرها هو السماح classloader توفر المكتبات لجميع هر السياقات.

إضافة روابط الرمزية إلى /usr/lib/jvm/جافا-1.5.0-الشمس-1.5.0.11/jre/lib (ملاحظة: قد تحتاج إلى تحديد نسخة مختلفة في هذا المسار) للسماح لجميع برامج جافا الوصول إلى هذه المكتبات أو إضافتها إلى هر المكتبات المشتركة في var/lib/tomcat5.5/مشترك/يبس (مرة أخرى ، رقم الإصدار قد تكون مختلفة) لكافة هر السياقات.

يجب أن نلاحظ أيضا أن هذه دليل مواقع اتخذت من أوبونتو "المشاكس".

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