سؤال

يحرر:أعتقد أنني يجب أن أوضح قصدي..

أحاول تبسيط دورة تكرار تطوير كود الكتابة >> إنشاء WAR >> النشر >> التحديث >> التكرار.أرغب في أن أكون مستقلاً نسبيًا عن IDE (أي لا أريد أن تقوم المكونات الإضافية Eclipse أو IntelliJ بالعمل).أريد أن أكون قادرًا على تحرير التعليمات البرمجية/الملفات الثابتة والإنشاء حسب الحاجة في دليل مصدر WAR الخاص بي، وإجراء إعداد التشغيل/التصحيح فقط كمكالمة سطر أوامر لتثبيت Jetty مركزي.

أود لاحقًا أن أكون قادرًا على تنفيذ النشر الفعلي باستخدام نفس الإعداد بشكل عام ولكن مع حزمة WAR.لا أريد أن يكون رمز التطبيق الخاص بي خاصًا بـ IDE أو Jetty.

لذا ربما تكون الطريقة الأفضل لطرح هذا السؤال هي ما الذي وجدته هو الطريقة الأنظف لاستخدام Jetty كخادم تطبيقات التطوير/التصحيح؟


لنفترض أنني أرغب في الحصول على الحد الأدنى من تثبيت Jetty 7.أريد الحد الأدنى من تكوين XML قدر الإمكان، أحتاج فقط إلى Servlet API الخام، بدون JSP، بدون تصفية، وما إلى ذلك.أريد فقط أن أكون قادرًا على الحصول على بعض السيرفلتس المخصصة وتقديم الملفات الثابتة إذا كانت موجودة.ستكون هذه هي الحرب الوحيدة وستكون بمثابة الجذر لمنفذ معين.

من الناحية المثالية، لسهولة النشر، أود أن يكون دليل Jetty هو التنزيل القياسي فقط، وأن يكون تكوين WAR / XML الخاص بي منفصلاً عن ملفات Jetty القياسية هذه.في استدعائي لـ Jetty، أود تمرير ملف XML البسيط هذا والانطلاق.

أجد أن الوثائق موجودة في كل مكان وأن معظمها مخصص لـ Jetty 6 أو خاص بحزم أخرى مختلفة (Spring، وما إلى ذلك).أعتقد أنه إذا كان لدي هذا الحد الأدنى من التكوين، فإن إضافة تجريدات إضافية في الأعلى سيكون أكثر نظافة.كما أنه سيسمح لي بالتعامل بشكل أكثر نظافة مع سيناريوهات Jetty المضمنة.

يعد سؤال SO هذا مثالاً على السيناريو الذي قد يكون فيه XML مفيدًا Jetty Run War باستخدام سطر الأوامر فقط

ما هو الحد الأدنى من XML اللازم لتحديد موقع WAR هذا والمضيفين/المنفذ لخدمته؟

شكرًا مقدمًا على أي مقتطفات أو روابط.

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

المحلول

لقد هاجر Jetty إلى Eclipse.هناك معلومات دقيقة للغاية حول هذا الموضوع.أدى هذا أيضًا إلى تغيير اسم الحزمة، وهو مستوى آخر من الفروق الدقيقة.لقد قاموا بنشر أداة لتحويل إعداد Jetty6 إلى إعداد Jetty 7، ولكن مرة أخرى - لا تحظى بشعبية كبيرة.أشعر بخيبة أمل من منتدى Eclipse Jetty.هذا هو المكان الذي يجب أن تبحث فيه عن الوثائق الخاصة بـ Jetty 7 وما بعده http://wiki.Eclipse.org/Jetty/Starting

وأعتقد أن هذا هو الحد الأدنى jetty.xml مأخوذ من http://wiki.Eclipse.org/Jetty/Reference/jetty.xml

<?xml version="1.0"?>
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure.dtd">\ 
<Configure id="Server" class="org.eclipse.jetty.server.Server">
</Configure>

لكني أفضل أن أبدأ بنسخة من $JETTY_HOME/etc/jetty.xml وسوف تعدل من هناك.

إذا كنت بخير مع $JETTY_HOME/webapps الدليل، يمكنك إعداد المنفذ عن طريق تعديل هذا الجزء

<Configure id="Server" class="org.eclipse.jetty.server.Server">
    ...
    <Call name="addConnector">
      <Arg>
          <New class="org.eclipse.jetty.server.nio.SelectChannelConnector">
            <Set name="host"><Property name="jetty.host" /></Set>
            <Set name="port"><Property name="jetty.port" default="7777"/></Set>
            <Set name="maxIdleTime">300000</Set>
            <Set name="Acceptors">2</Set>
            <Set name="statsOn">false</Set>
            <Set name="confidentialPort">8443</Set>
        <Set name="lowResourcesConnections">20000</Set>
        <Set name="lowResourcesMaxIdleTime">5000</Set>
          </New>
      </Arg>
    </Call>
    ....
</Configure>

وإلا سأقوم بالتعديل context.xml الطريقة الموضحة هنا (لـ Jetty 7) كيفية خدمة webapp A من portA وwebapp B من portB

راجع هذه الصفحات أيضًا:

....التعديل رقم 1:نأسف لوجود عنوان URL خاطئ لتطبيق الويب لكل موصل.لقد قمت بتحديث الرابط ل كيفية خدمة webapp A من portA وwebapp B من portB للإشارة إلى المستند المخصص لـ Jetty 7.


تحديث حول "كيف تتعامل مع جيتي في بيئات مختلفة؟"

ديف

نحن نستخدم Maven، لذا فإن Jetty المضمنة يعمل لصالحنا.نحن فقط نركض mvn clean install run:jetty ويتم تكوين المنفذ في ملف التكوين الخاص بـ Maven، أي pom.xml.هذا هو لا يمكن تضمين Jetty المعتمدة على IDE بسهولة باستخدام ANT، لكنني لم أحاول ذلك مطلقًا.

امتحان

لدينا رصيف مستقل يعمل.لقد قمت بتكوين المنفذ وضبط المعلمات، وإزالة التطبيقات الافتراضية (على سبيل المثال.root.war وما إلى ذلك) وقمت بإنشاء context.xml مع منافذ خاصة بالتطبيق ودليل النشر.(لسوء الحظ، لقد طرحت هذا السؤال على القائمة البريدية لـ Eclipse Jetty ولم يهتم أحد بالإجابة).هذا هو الإعداد مرة واحدة.

بالنسبة لعمليات البناء/النشر الاختبارية، لدينا برنامج نصي للبناء يبني WAR وفقًا لمواصفات بيئة الاختبار ثم يقوم بتحميله إلى بيئة الاختبار.بعد ذلك، نقوم باستدعاء برنامج شل النصي الذي (1) يوقف Jetty، (2) ينسخ ملف الحرب إلى دليل تطبيق الويب الخاص بـ myApp و (3) يعيد تشغيل Jetty.

ومع ذلك، فإن الطريقة الأسهل للقيام بذلك هي استخدام البرنامج الإضافي Maven's Cargo.كان الحظ السيئ هو أنني كنت أستخدم Jetty 7.1.6 والذي كان غير متوافق مع Cargo.قاموا بإصلاح المشكلة لاحقًا، لكنني أنجزت مهمتي باستخدام برنامج نصي مخصص.

همز

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

لاحظ أنني لم أهتم بشأن ماهية ملفات XML وعددها الذي يجب أن يكون موجودًا.لقد استخدمت للتو تلك التي هي اهتماماتي -- jetty.xml و context.xml.بالإضافة إلى ذلك، وجدت أنه أكثر نظافة للاستخدام jetty.conf و jetty.sh لتمرير معلمات JVM وXMLs المخصصة والبدء والإيقاف.

أتمنى أن يساعدك هذا.


عند النشر الساخن:

الآن، إذا كنت تستخدم Maven واستخدمت Jetty المضمنة.إنه يعرف فقط متى يتم تغيير الرمز - مثل "أداة شم الرصاص".في dev envt، يمكنك تشغيل Jetty وإجراء التغييرات وتحديث الصفحة ورؤية التغييرات -- النشر الساخن.العثور على المزيد هنا http://docs.codehaus.org/display/JETTY/Maven+Jetty+Plugin بحث scanIntervalSeconds

نصائح أخرى

لا يجيب هذا على سؤالك بالكامل، ولكن في حالة تساعده، إليك بعض الكود الأدنى بشكل كبير باستخدام Jetty 7 مضمنا لإطلاق خادم مع خادم جذر واحد: giveacodicetagpre.

شاهد بالطبع http://wiki.eclipse.org/jetty/tutorial/mbedding_jettyea>.

إذا كنت تقوم ببناء مع Maven (وهي IDE مستقلة)، فعليك تصحيح برنامج Maven Jetty Plugin. تعمل بشكل أساسي على تشغيل التطبيق ك "MVN Jetty: تشغيل" على Commandline كل شيء يعمل فقط دون الحاجة إلى القيام بأي إعادة نشر. معظم المعالم الجيدة كيف يتم إنشاء دعم Maven ويتيح لك تشغيل / تصحيح التطبيق كأطراف؛ بمعنى أن Maven يتم تشغيله الذي يبدأ تشغيل البرنامج المساعد Jetty الذي يبدأ التطبيق ويمكنك تصحيحه. نظرا لأن كل شيء ينفد من مصدر IDE ومجلدات BIN التي لا تحتاج حتى إلى تثبيت خادم Jetty.

هنا هو مشروع تجريبي يعمل بهذه الطريقة https : //github.com/simbo1905/zktodo2/blob/master/commandline.build.and.run.txt وهنا هو كيفية تشغيله تحت الكسوف https://github.com/simbo1905/simbo1905/zktodo2/blob/master/eclipse.indigo.build. Debug.txt ولكن أي IDE الذي يفهم Maven يجب أن يعمل. إلقاء نظرة على Pom.xml حيث يقوم بإعداد البرنامج المساعد Maven Jetty.

أود استخدام المتدرج ومسح مجلد إخراج البناء كل بضع ثوان للتغيرات في الإنشاء.

في ملف build.gradle: giveacodicetagpre.

هذا كل شيء.يمكنك اختيار أن يكون لديك بناء IDE Auto-Build لك، ونقيف في هذا الدليل.ولكن يمكنك أيضا اختيار عدم.لا يتم ربط هذا الحل على الإطلاق إلى IDE.

اعتقدت أنني سأقوم بالتحديث مع ما أقوم به الآن.لقد كتبت تطبيق سطر الأوامر الصغير / النموذج الأساسي Maven الذي يعمل مثل كيف اعتقدت أن كل ذلك يجب أن يكون في المقام الأول.يتيح لك تطبيق Bootstrap تشغيل حاوية Serverlet الخاصة بك (Jetty، Tomcat، Glassfish) من خلال اجتيازها على الطريق إلى الحرب والمنفذ الخاص بك.

باستخدام Maven، يمكنك إنشاء وحزم مثيلك الخاص بهذا التطبيق البسيط: giveacodicetagpre.

ثم يمكنك إطلاقها مثل هذا: giveacodicetagpre.

إليك مصدر الأداة المساعدة والنموذج الأصلي: https://bitbucket.org/mckamey/war-Bootstrap

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