يوفر المكون الإضافي إمكانيات نشر لتطبيقات الويب إلى حاوية ويب Tomcat المدمجة في أي بناء Gradle معين. يمتد البرنامج المساعد للحرب. في الوقت الحالي ، يتم دعم إصدارات Tomcat 6.0.x ، 7.0.x ، 8.0.x ، 8.5.x و 9.0.x.
حالة الاستخدام النموذجية لهذا البرنامج المساعد هي دعم النشر أثناء التطوير. يسمح المكون الإضافي بتطوير تطبيق الويب السريع بسبب أوقات بدء التشغيل السريعة للحاوية. تبدأ Gradle الحاوية المدمجة في نفس JVM. حاليا ، لا يمكن أن يتم تشويه الحاوية كعملية منفصلة. لا يمكن لهذا البرنامج المساعد أيضًا نشر ملف حرب على حاوية بعيدة. إذا كنت تبحث عن هذه الإمكانية ، فيرجى إلقاء نظرة على المكون الإضافي للشحن بدلاً من ذلك.
لاستخدام وظيفة المكون الإضافي ، ستحتاج إلى إضافة قطعة أثرية ثنائية إلى ClassPath الخاصة بـ Build Script وتطبيق المكون الإضافي.
يجب تعريف جرة البرنامج المساعد في ClassPath من البرنامج النصي للبناء. وهي متوفرة مباشرة على بوابة Gradle Plugin. يظهر مقتطف الرمز التالي مثالاً على كيفية استرداده:
buildscript {
repositories {
gradlePluginPortal()
}
dependencies {
classpath ' com.bmuschko:gradle-tomcat-plugin:2.7.0 '
}
}يأتي ملف الجرة مع اثنين من الإضافات:
| المعرف الإضافي | يعتمد على | يكتب | وصف |
|---|---|---|---|
| com.bmuschko.tomcat-base | - | Tomcatbaseplugin | يوفر أنواع المهام المخصصة لـ Tomcat ، ClassPath مسبقًا. |
| com.bmuschko.tomcat | com.bmuschko.tomcat-base | tomcatplugin | يوفر مهام لبدء ووقف حاوية Tomcat المدمجة وتكشف تمديدًا يدعى tomcat . |
يساعدك المكون الإضافي com.bmuschko.tomcat على البدء بسرعة. إذا كنت على ما يرام إذا كانت المهام التي تم تكوينها مسبقًا ، فهذا هو الخيار المفضل. سيذهب معظم مستخدمي البرنامج المساعد مع هذا الخيار. لاستخدام المكون الإضافي Tomcat ، قم بتضمين مقتطف الكود التالي في البرنامج النصي للبناء:
apply plugin: 'com.bmuschko.tomcat'
إذا كنت بحاجة إلى تحكم كامل في مهامك أو لا ترغب في الذهاب مع المهام المسبقة ، فستحتاج إلى استخدام المكون الإضافي com.bmuschko.tomcat-base . قد يكون هذا هو الحال إذا كنت تريد إعداد الحاوية فقط للاختبار الوظيفي. الجانب السلبي هو أنه يجب تكوين كل مهمة بشكل فردي في البرنامج النصي للبناء. لاستخدام المكون الإضافي Tomcat Base ، قم بتضمين مقتطف الكود التالي في البرنامج النصي للبناء:
apply plugin: 'com.bmuschko.tomcat-base'
بالإضافة إلى ذلك ، يجب إضافة مكتبات وقت تشغيل Tomcat إلى تكوين tomcat . في الوقت الحالي ، يتم دعم إصدارات Tomcat 6.0.x ، 7.0.x ، 8.0.x ، 8.5.x و 9.0.x بواسطة المكون الإضافي. تأكد من عدم خلط مكتبات Tomcat من الإصدارات المختلفة.
Tomcat 6.0.x:
repositories {
mavenCentral()
}
dependencies {
def tomcatVersion = ' 6.0.51 '
tomcat " org.apache.tomcat:catalina: ${ tomcatVersion } " ,
" org.apache.tomcat:coyote: ${ tomcatVersion } " ,
" org.apache.tomcat:jasper: ${ tomcatVersion } "
}Tomcat 7.0.x:
repositories {
mavenCentral()
}
dependencies {
def tomcatVersion = ' 7.0.76 '
tomcat " org.apache.tomcat.embed:tomcat-embed-core: ${ tomcatVersion } " ,
" org.apache.tomcat.embed:tomcat-embed-logging-juli: ${ tomcatVersion } " ,
" org.apache.tomcat.embed:tomcat-embed-jasper: ${ tomcatVersion } "
}Tomcat 8.0.x:
repositories {
mavenCentral()
}
dependencies {
def tomcatVersion = ' 8.0.42 '
tomcat " org.apache.tomcat.embed:tomcat-embed-core: ${ tomcatVersion } " ,
" org.apache.tomcat.embed:tomcat-embed-logging-juli: ${ tomcatVersion } " ,
" org.apache.tomcat.embed:tomcat-embed-jasper: ${ tomcatVersion } "
}Tomcat 8.5.x:
يرجى العلم أن التبعية tomcat-embed-logging-juli مطلوبة فقط لتمكين تسجيل الحاويات عبر log4j 1.x (الذي لم يعد يدعمه مجتمع Log4J). يمكن استخدام Log4J 2.x لتسجيل الحاويات دون إعلان أي مكتبات إضافية.
repositories {
mavenCentral()
}
dependencies {
def tomcatVersion = ' 8.5.16 '
tomcat " org.apache.tomcat.embed:tomcat-embed-core: ${ tomcatVersion } " ,
" org.apache.tomcat.embed:tomcat-embed-logging-juli:8.5.2 " ,
" org.apache.tomcat.embed:tomcat-embed-jasper: ${ tomcatVersion } "
}
tomcat {
httpProtocol = ' org.apache.coyote.http11.Http11Nio2Protocol '
ajpProtocol = ' org.apache.coyote.ajp.AjpNio2Protocol '
}Tomcat 9.0.x:
يرجى العلم أن التبعية tomcat-embed-logging-juli مطلوبة فقط لتمكين تسجيل الحاويات عبر log4j 1.x (الذي لم يعد يدعمه مجتمع Log4J). يمكن استخدام Log4J 2.x لتسجيل الحاويات دون إعلان أي مكتبات إضافية.
repositories {
mavenCentral()
}
dependencies {
def tomcatVersion = ' 9.0.1 '
tomcat " org.apache.tomcat.embed:tomcat-embed-core: ${ tomcatVersion } " ,
" org.apache.tomcat.embed:tomcat-embed-logging-juli:9.0.0.M6 " ,
" org.apache.tomcat.embed:tomcat-embed-jasper: ${ tomcatVersion } "
}
tomcat {
httpProtocol = ' org.apache.coyote.http11.Http11Nio2Protocol '
ajpProtocol = ' org.apache.coyote.ajp.AjpNio2Protocol '
} المكوّن الإضافي com.bmuschko.tomcat يسبق المهام التالية خارج الصندوق:
| اسم المهمة | يعتمد على | يكتب | وصف |
|---|---|---|---|
| تومكرون | - | تومكرون | يبدأ مثيل Tomcat ونشر تطبيق الويب الذي تم انفجاره إليه. |
| Tomcatrunwar | - | Tomcatrunwar | يبدأ مثيل Tomcat ونشر الحرب عليها. |
| tomcatstop | - | tomcatstop | توقف مثيل tomcat. |
| Tomcatjasper | - | Tomcatjasper | يدير برنامج التحويل البرمجي JSP ويحول صفحات JSP إلى مصدر Java باستخدام Jasper. |
يستخدم المكون الإضافي Tomcat نفس التصميم مثل البرنامج المساعد للحرب.
يكشف المكون الإضافي Tomcat الخصائص التالية من خلال الامتداد المسمى tomcat :
httpPort : منفذ TCP الذي يجب أن يستمع Tomcat لطلبات HTTP على (الافتراضيات إلى 8080 ).httpsPort : منفذ TCP الذي يجب أن يستمع TOMCAT لطلبات HTTPS على (الافتراضيات إلى 8443 ).ajpPort : منفذ TCP الذي يجب أن يستمع Tomcat لطلبات AJP على (الافتراضيات إلى 8009 ).stopPort : منفذ TCP الذي يجب أن يستمع إليه Tomcat لطلبات المسؤول (الافتراضيات إلى 8081 ).stopKey : مفتاح الانتقال إلى Tomcat عند طلبه للتوقف (الافتراضيات إلى null ).contextPath : مسار سياق عنوان URL الذي يتم بموجبه تسجيل تطبيق الويب (الإعدادات الافتراضية لاسم الحرب).enableSSL : يحدد ما إذا كان ينبغي إنشاء موصل HTTPS (الافتراضيات إلى false ).daemon : يحدد ما إذا كان يجب أن يعمل خادم Tomcat في الخلفية. عندما يكون هذا صحيحًا ، تكمل هذه المهمة بمجرد بدء الخادم. عندما تكون خاطئة ، يتم حظر هذه المهمة حتى يتم إيقاف خادم Tomcat (الإعدادات الافتراضية إلى false ).keystoreFile : ملف keystore المراد استخدامه لـ SSL ، إذا تم تمكينه (بشكل افتراضي ، سيتم إنشاء keystore).httpProtocol : اسم فئة معالج بروتوكول HTTP ليتم استخدامه (الافتراضيات إلى org.apache.coyote.http11.Http11Protocol ).httpsProtocol : اسم فئة معالج بروتوكول HTTPS ليتم استخدامه (الافتراضيات إلى org.apache.coyote.http11.Http11Protocol ).ajpProtocol : اسم فئة معالج بروتوكول AJP ليتم استخدامه (الافتراضيات إلى org.apache.coyote.ajp.AjpProtocol ).users : قائمة المستخدمين الذين يحملون username password roles . تستخدم لتكوين tomcat مع المصادقة الأساسية مع هؤلاء المستخدمين. يوضح رمز المثال التالي كيفية تغيير منافذ HTTP/HTTPS الافتراضية. لتمكين SSL قمنا بتعيين العقار enableSSL على true . يمكن الوصول إلى تطبيق الويب ضمن sample-app مسار السياق.
tomcat {
httpPort = 8090
httpsPort = 8091
enableSSL = true
contextPath = ' sample-app '
users {
user {
username = ' user1 '
password = ' 123456 '
roles = [ ' developers ' , ' admin ' ]
}
user {
username = ' user2 '
password = ' abcdef '
roles = [ ' manager ' ]
}
}
}علاوة على ذلك ، يمكنك تعيين خصائص المهمة الاختيارية التالية:
contextPath : مسار سياق عنوان URL سيتم تسجيل تطبيق الويب الخاص بك تحت (الافتراضيات إلى اسم الحرب).webDefaultXml : الافتراضي web.xml. إذا لم يتم تحديد مثيل لـ org.apache.catalina.servlets.DefaultServlet و org.apache.jasper.servlet.JspServlet .additionalRuntimeResources : يحدد الجرار أو الدلائل الإضافية التي لا يتم توفيرها بواسطة تطبيق الويب.URIEncoding : يحدد الحرف الترميز المستخدم لفك تشفير بايت URI بواسطة موصل HTTP (الافتراضيات إلى UTF-8 ).daemon : يحدد ما إذا كان يجب أن يعمل خادم Tomcat في الخلفية. عندما يكون هذا صحيحًا ، تكمل هذه المهمة بمجرد بدء الخادم. عندما تكون خاطئة ، يتم حظر هذه المهمة حتى يتم إيقاف خادم Tomcat (الإعدادات الافتراضية إلى false ).configFile : المسار إلى ملف XML سياق TOMCAT (الافتراضيات إلى src/main/webapp/META-INF/context.xml لـ tomcatRun ، الافتراضيات إلى META-INF/context.xml داخل الحرب من أجل tomcatRunWar ).outputFile : الملف لكتابة رسائل سجل tomcat إلى. إذا كان الملف موجودًا بالفعل ، فسيتم إلحاق رسائل جديدة.reloadable : قوات المسح الضوئي إذا كنت لا تستخدم ملف سياق (الافتراضيات إلى true ).keystorePass : كلمة مرور keystore لاستخدامها في SSL ، إذا تم تمكينها.truststoreFile : ملف TrustStore لاستخدامه في SSL ، إذا تم تمكينه.truststorePass : كلمة مرور TrustStore لاستخدامها في SSL ، إذا تم تمكينها.clientAuth : إعداد ClientAuth للاستخدام ، قد تكون القيم: true ، false أو want (الافتراضيات إلى false ). ملاحظة: يتطلب كل من keystoreFile و truststoreFile مثيلًا لملف File مثل file("/path/my.file")
في رمز المثال التالي ، نعلن عن ملف سياق مخصص للمهمة tomcatRun .
tomcatRun . configFile = file( ' context.xml ' ) لتكوين مهمة برنامج التحويل البرمجي Jasper ، يمكنك اختيار تعيين الخصائص التالية في إغلاق jasper لتمديد tomcat :
validateXml : يحدد ما إذا كان ينبغي التحقق من صحة web.xml (الافتراضيات إلى null ).validateTld : يحدد ما إذا كان ينبغي التحقق من صحة web.xml (الافتراضيات إلى null ).uriroot : دليل جذر تطبيق الويب (الإعدادات الافتراضية لـ src/main/webapp ).webXmlFragment : يتم الرجوع إلى ملف Web XML Fragment الذي تم إنشاؤه بواسطة ملف web.xml الخاص بك.addWebXmlMappings : إضافة تلقائيًا إضافة جزء XML الويب الذي تم إنشاؤه إلى ملف web.xml . تحذير: سيؤدي ذلك إلى تعديل ملف web.xml في المشروع ، وليس دليل الإنشاء.outputDir : دليل الإخراج الذي سينتهي به الأمر JSPs المترجم (الافتراضيات build/jasper ).classdebuginfo : إذا تم تجميع ملف الفصل بمعلومات تصحيح الأخطاء (الافتراضيات إلى true ).compiler : الذي يجب أن يستخدمه النمل المترجم لتجميع صفحات JSP. راجع وثائق ANT لمزيد من المعلومات. إذا لم يتم تعيين القيمة ، فسيتم استخدام برنامج التحويل البرمجي JDT JAVA الافتراضي Eclipse JDT بدلاً من استخدام ANT. لا قيمة افتراضية.compilerSourceVM : ما هو إصدار JDK هو الملفات المصدر المتوافقة مع (الافتراضيات إلى 1.6 ).compilerTargetVM : ما هو إصدار JDK هو الملفات التي تم إنشاؤها متوافقة مع (الافتراضيات إلى 1.6 ).poolingEnabled : يحدد ما إذا كان تم تمكين تجمع معالج العلامات. هذا هو خيار التجميع. لن يغير سلوك JSPs الذي تم تجميعه بالفعل (الإعدادات الافتراضية إلى true ).errorOnUseBeanInvalidClassAttribute : إذا أصدرت جاسبر خطأ عندما تكون قيمة سمة الفئة في إجراء useBean ليست فئة فول صالحة (الافتراضيات إلى true ).genStringAsCharArray : إذا تم إنشاء سلاسل نصية كصفائف char ، لتحسين الأداء في بعض الحالات (الافتراضيات إلى false ).ieClassId : يتم إرسال قيمة معرف الفصل إلى Internet Explorer عند استخدام علامات <jsp:plugin> (الافتراضيات إلى clsid:8AD9C840-044E-11D1-B3E9-00805F499D93 ).javaEncoding : ملف Java ترميز لاستخدامه لإنشاء ملفات مصدر Java (الافتراضيات إلى UTF8 ).trimSpaces : يجب تقليص المساحات البيضاء في نص القالب بين الإجراءات أو التوجيهات (الافتراضيات إلى TrimSpaces.TRUE ).xpoweredBy : يحدد ما إذا كان يتم إضافة رأس استجابة من X-By-By بواسطة servlet المولدة (الافتراضيات إلى false ).tomcat {
jasper {
validateXml = true
webXmlFragment = file( " $w ebAppDir /WEB-INF/generated_web.xml " )
outputDir = file( " $w ebAppDir /WEB-INF/src " )
}
}أحصل على استثناء تجميع عند الاتصال بـ JSP. هل هناك شيء أفتقده؟
الاستثناء الذي قد تراه يشبه هذا على الأرجح: org.apache.jasper.JasperException: Unable to compile class for JSP . يتطلب Tomcat 7.x و 8.x أن يكون لديك Eclipse ECJ 3.6.x في classpath الخاص بك. ومع ذلك ، فإن هذا الإصدار من التبعية غير موجود في مافن سنترال. سيتعين عليك تنزيل هذا التبعية ووضعه في مستودعك الخاص أو تحديد مستودع على القرص المحلي حيث يمكنك إسقاطه. إليك مثال:
repositories {
flatDir name : ' localRepository ' , dirs : ' lib '
} لماذا أحصل على java.lang.ClassCastException على javax.servlet.Servlet ؟
Tomcat حساس للغاية لوجود إصدارات متعددة من التبعيات javax.servlet:servlet-api و javax.servlet:jsp-api في classpath. بشكل افتراضي ، يتم سحبهم بالفعل كتبعيات متعدية لمكتبات Tomcat المضمنة. الاستثناء الذي قد تراه يشبه هذا:
java.lang.ClassCastException: org.springframework.web.servlet.DispatcherServlet cannot be cast to javax.servlet.Servlet
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1062)
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1010)
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4935)
at org.apache.catalina.core.StandardContext$3.call(StandardContext.java:5262)
at org.apache.catalina.core.StandardContext$3.call(StandardContext.java:5257)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)
لإصلاح هذا ، تأكد من تحديد تبعيات JSP و Servlet وحدة مع النطاق providedCompile مثل هذا:
providedCompile ' javax.servlet:servlet-api:2.5 ' ,
' javax.servlet:jsp-api:2.0 'كيف يمكنني التصحيح عن بُعد ، بدأ Tomcat الخاص بي بواسطة المكون الإضافي؟
إذا كنت تريد أن تكون قادرًا على تصحيح التطبيق الخاص بك عن بُعد ، فيجب عليك تعيين خيارات JVM التالية في متغير بيئة GRADLE_OPTS قبل بدء الحاوية. رقم المنفذ الذي تختاره متروك لك.
-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005
سيستمع Tomcat بعد ذلك على المنفذ المحدد لاتصالات تصحيح الأخطاء عن بُعد الواردة. عند بدء تشغيل الحاوية ، يجب أن ترى الرسالة التالية:
Listening for transport dt_socket at address: 5005
تحقق من وثائق IDE الخاصة بك حول كيفية تكوين الاتصال بمنفذ تصحيح الأخطاء عن بُعد.
تحتاج حاوية Tomcat إلى استخدام مصدر بيانات JNDI. كيف أقوم بإعداد مشروعي؟
بادئ ذي بدء ، عليك التأكد من إعلان تبعية تجمع الاتصال باستخدام تكوين tomcat .
Tomcat 6.0.x:
def tomcatVersion = ' 6.0.35 '
tomcat " org.apache.tomcat:dbcp: ${ tomcatVersion } "انظر الإحداثيات على Maven Central للحصول على التفاصيل.
إصدارات لاحقة:
def tomcatVersion = ' 9.0.8 '
tomcat " org.apache.tomcat:tomcat-dbcp: ${ tomcatVersion } "انظر الإحداثيات على Maven Central للحصول على التفاصيل.
إذا قررت الذهاب مع الإعدادات الافتراضية ، ضع context.xml في الدليل src/main/webapp/META-INF . لتعيين موقع مخصص ، يمكنك استخدام Convention Property configFile . إليك مثال على كيفية تعيينه للمهام tomcatRun و tomcatRunWar .
[tomcatRun, tomcatRunWar] * . configFile = file( ' context.xml ' )يرجى الرجوع إلى وثائق tomcat للحصول على قائمة بسمات السياق. يوضح المثال التالي كيفية إعداد MySQL JNDI DataSource.
<? xml version = " 1.0 " encoding = " UTF-8 " ?>
< Context >
< Resource name = " jdbc/mydatabase "
auth = " Container "
type = " javax.sql.DataSource "
username = " superuser "
password = " secretpasswd "
driverClassName = " com.mysql.jdbc.Driver "
url = " jdbc:mysql://localhost:3306/mydb "
validationQuery = " select 1 "
maxActive = " 10 "
maxIdle = " 4 " />
</ Context >كيف يمكنني استخدام نشر الرمز الساخن مع البرنامج المساعد؟
يوفر المكون الإضافي دعمًا خارج الصندوق لتبديل رمز البايت من خلال reloadable الخاصية. بشكل افتراضي ، يتم تغيير هذا الخيار حتى لا تحتاج إلى أي تغييرات إضافية في التكوين. كل ما عليك فعله هو أن يكون لديك مثيل تشغيل للحاوية التي بدأها tomcatRun . قم بإطلاق المحرر المفضل لديك ، وقم بتغيير ملف مصدر الإنتاج ، وحفظه ، وقم بإعادة ترجمة مصادرك في محطة أخرى عبر gradle compileJava . بعد بضع ثوانٍ ، يتم إعادة تحميل السياق ويجب أن ترى السلوك ينعكس في النافذة الطرفية التي تعمل على تشغيل الحاوية:
Reloading Context with name [/myapp] has started
Reloading Context with name [/myapp] is completed
بدلاً من ذلك ، يمكنك استخدام تقنيات مبادلة رمز البايت الأخرى. عادة ما يكون التكوين خاصًا بالمنتج. يرجى الرجوع إلى وثائق المنتج حول كيفية إعداده لمشروعك. يصف القسم التالي كيفية إعداد Gradle و Plugin مع Jrebel. بادئ ذي بدء ، قم بتنزيل Jrebel ، وقم بتثبيته على جهازك وقم بإعداد الترخيص. لإخبار jrebel أي دليل للمسح للحصول على رمز البايت الذي تم تغييره ، تحتاج إلى إنشاء ملف rebel.xml. في وحدة الويب الخاصة بك ، ضع الملف ضمن build/classes/main بحيث يمكن تحميله بواسطة البرنامج المساعد Tomcat. لإنشاء تكوين الملف ، يأتي Gradle Jrebel Plugin في متناول يدي. ليس مطلوبًا لاستخدام البرنامج المساعد. يمكنك أيضًا أن تقرر إنشاء التكوين باليد. ضع في اعتبارك أن gradle clean سوف يحذف الملف. لإعداد Jrebel في سيناريو مشروع متعدد الوحدات ، يرجى الرجوع إلى الوثائق. يعرض مقتطف الكود التالي ملفًا مثالًا على rebel.xml .
<? xml version = " 1.0 " encoding = " UTF-8 " ?>
< application xmlns : xsi = " http://www.w3.org/2001/XMLSchema-instance " xmlns = " http://www.zeroturnaround.com "
xsi : schemaLocation = " http://www.zeroturnaround.com http://www.zeroturnaround.com/alderaan/rebel-2_0.xsd " >
< classpath >
< dir name = " /Users/ben/dev/projects/mywebproject/build/classes/main " >
</ dir >
</ classpath >
< web >
< link target = " / " >
< dir name = " /Users/ben/dev/projects/mywebproject/src/main/webapp " >
</ dir >
</ link >
</ web >
</ application > قم بتحرير البرنامج النصي بدء تشغيل Gradle وأضف السطر التالي إليه لإخبار Gradle باستخدام وكيل Jrebel. يرجى التأكد من تعيين متغير البيئة REBEL_HOME الذي يشير إلى دليل تثبيت Jrebel الخاص بك.
JAVA_OPTS="-javaagent:$REBEL_HOME/jrebel.jar $JAVA_OPTS"
عند بدء تشغيل وحدة الويب الخاصة بك باستخدام gradle tomcatRun ، يجب أن ترى معلومات حول ترخيص Jrebel المستخدمة والدلائل التي يتم مسحها للتغييرات. على سبيل المثال ملف rebel.xml ، سيبدو هكذا:
JRebel: Directory '/Users/ben/dev/projects/mywebproject/build/classes/main' will be monitored for changes.
JRebel: Directory '/Users/ben/dev/projects/mywebproject/src/main/webapp' will be monitored for changes.
إذا تم إعادة ترجمة ملف Jrebel يشير إلى ذلك عن طريق كتابته إلى وحدة التحكم مثل هذا:
JRebel: Reloading class 'de.muschko.web.controller.TestController'.
في حاجة إلى إجراء اختبارات التكامل داخل الوصية كجزء من بناتي. ما الذي يجب القيام به؟
عادة ما يتم الحفاظ على اختبارات الوحدة والتكامل منفصلة حسب الاتفاقية. يمكن أن تكون إحدى الاتفاقيات هي تسمية ملفات مصدر الاختبار بشكل مختلف ، مثل اختبارات التكامل التي تنتهي دائمًا بتكامل IntegrationTest ، وتنتهي ملفات اختبار الوحدة مع Test . من خلال القيام بذلك يمكنك تشغيلها بشكل منفصل. لتشغيل اختبارات التكامل ، ستحتاج إلى تشغيل مهمة Tomcat كخيط Daemon وإغلاقه بمجرد إجراء اختباراتك. يوضح المثال التالي كيفية إعداد مهمة Gradle التي توفر هذه الوظيفة. بالطبع هذه طريقة واحدة فقط للقيام بذلك. يتطلب المثال التالي Gradle> = 1.7:
apply plugin : ' com.bmuschko.tomcat-base '
ext {
tomcatStopPort = 8081
tomcatStopKey = ' stopKey '
}
task integrationTomcatRun( type : com.bmuschko.gradle.tomcat.tasks.TomcatRun ) {
stopPort = tomcatStopPort
stopKey = tomcatStopKey
daemon = true
}
task integrationTomcatStop( type : com.bmuschko.gradle.tomcat.tasks.TomcatStop ) {
stopPort = tomcatStopPort
stopKey = tomcatStopKey
}
task integrationTest( type : Test ) {
include ' **/*IntegrationTest.* '
dependsOn integrationTomcatRun
finalizedBy integrationTomcatStop
}
test {
exclude ' **/*IntegrationTest.* '
}كيف يمكنني إضافة ملفات جرة أو أدلة ليست جزءًا من رمز مصدر تطبيق الويب الخاص بي؟
تكشف كل مهمة من Type AbstractTomcatRun خاصية تدعى additionalRuntimeResources يتم استخدامها للخلط مع ClassPath وقت تشغيل تطبيق الويب.
[tomcatRun, tomcatRunWar] . each { task ->
task . additionalRuntimeResources << file( ' /Users/bmuschko/config/props ' )
task . additionalRuntimeResources << file( ' /Users/bmuschko/ext/jars/my.jar ' )
}