ปลั๊กอินให้ความสามารถในการปรับใช้ของเว็บแอปพลิเคชันไปยังคอนเทนเนอร์เว็บ Tomcat ที่ฝังอยู่ในบิลด์ Gradle ที่กำหนด มันขยายปลั๊กอินสงคราม ในขณะที่ Tomcat เวอร์ชัน 6.0.x, 7.0.x, 8.0.x, 8.5.x และ 9.0.x รองรับ
กรณีการใช้งานทั่วไปสำหรับปลั๊กอินนี้คือการสนับสนุนการปรับใช้ระหว่างการพัฒนา ปลั๊กอินช่วยให้สามารถพัฒนาเว็บแอปพลิเคชันได้อย่างรวดเร็วเนื่องจากเวลาเริ่มต้นอย่างรวดเร็วของคอนเทนเนอร์ Gradle เริ่มภาชนะฝังตัวใน JVM เดียวกัน ปัจจุบันคอนเทนเนอร์ไม่สามารถแยกเป็นกระบวนการแยกต่างหาก ปลั๊กอินนี้ยังไม่สามารถปรับใช้ไฟล์สงครามกับคอนเทนเนอร์ระยะไกลได้ หากคุณกำลังมองหาความสามารถนี้โปรดดูปลั๊กอินสินค้าแทน
ในการใช้ฟังก์ชั่นของปลั๊กอินคุณจะต้องเพิ่มสิ่งประดิษฐ์ไบนารีลงใน ClassPath ของสคริปต์บิลด์ของคุณและใช้ปลั๊กอิน
ต้องกำหนดขวดปลั๊กอินใน ClassPath ของสคริปต์การสร้างของคุณ มันพร้อมใช้งานโดยตรงบนพอร์ทัลปลั๊กอิน Gradle ตัวอย่างโค้ดต่อไปนี้แสดงตัวอย่างเกี่ยวกับวิธีการดึงข้อมูล:
buildscript {
repositories {
gradlePluginPortal()
}
dependencies {
classpath ' com.bmuschko:gradle-tomcat-plugin:2.7.0 '
}
}ไฟล์ jar มาพร้อมกับปลั๊กอินสองตัว:
| ตัวระบุปลั๊กอิน | ขึ้นอยู่กับ | พิมพ์ | คำอธิบาย |
|---|---|---|---|
| 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 ให้รวมตัวอย่างโค้ดต่อไปนี้ในสคริปต์บิลด์ของคุณ:
apply plugin: 'com.bmuschko.tomcat-base'
นอกจากนี้ต้องเพิ่มไลบรารี Tomcat Runtime ในการกำหนดค่า 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 หากเปิดใช้งาน (โดยค่าเริ่มต้นคีย์จะถูกสร้างขึ้น)httpProtocol : ชื่อคลาส Handler HTTP โปรโตคอลที่จะใช้ (ค่าเริ่มต้นเป็น org.apache.coyote.http11.Http11Protocol )httpsProtocol : ชื่อคลาส Handler HTTPS โปรโตคอลที่จะใช้ (ค่าเริ่มต้นเป็น org.apache.coyote.http11.Http11Protocol )ajpProtocol : ชื่อคลาส Handler AJP Protocol ที่จะใช้ (ค่าเริ่มต้นเป็น 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 : พา ธ ไปยังไฟล์บริบท Tomcat XML (ค่าเริ่มต้นไปยัง 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 Compiler คุณสามารถเลือกที่จะตั้งค่าคุณสมบัติต่อไปนี้ภายในการปิด jasper ของส่วนขยาย tomcat :
validateXml : กำหนดว่าควรตรวจสอบ web.xml หรือไม่ (ค่าเริ่มต้นเป็น null )validateTld : กำหนดว่า web.xml ควรได้รับการตรวจสอบความถูกต้องหรือไม่ (ค่าเริ่มต้นเป็น null )uriroot : เว็บแอปพลิเคชันรูทไดเรกทอรี (ค่าเริ่มต้นเป็น src/main/webapp )webXmlFragment : ไฟล์ Fragment Web XML ที่สร้างขึ้นที่จะอ้างอิงโดยไฟล์ web.xml ของคุณaddWebXmlMappings : เพิ่มส่วน Web XML ที่สร้างขึ้นโดยอัตโนมัติลงในไฟล์ web.xml ข้อควรระวัง: สิ่งนี้จะแก้ไขไฟล์ web.xml ในโครงการไม่ใช่ไดเรกทอรี BuildoutputDir : ไดเรกทอรีเอาต์พุต JSP ที่คอมไพล์จะจบลงใน (ค่าเริ่มต้นใน build/jasper )classdebuginfo : ควรรวบรวมไฟล์คลาสด้วยข้อมูลการดีบัก (ค่าเริ่มต้นเป็น true )compiler : มดคอมไพเลอร์ใดที่ควรใช้เพื่อรวบรวมหน้า JSP ดูเอกสารเกี่ยวกับข้อมูลเพิ่มเติม หากไม่ได้ตั้งค่าค่าคอมไพเลอร์ eclipse jdt Java เริ่มต้นจะถูกนำมาใช้แทนการใช้ ANT ไม่มีค่าเริ่มต้นcompilerSourceVM : เวอร์ชัน JDK คือไฟล์ต้นฉบับที่เข้ากันได้กับ (ค่าเริ่มต้นถึง 1.6 )compilerTargetVM : เวอร์ชัน JDK คือไฟล์ที่สร้างขึ้นร่วมกับ (ค่าเริ่มต้นถึง 1.6 )poolingEnabled : กำหนดว่าเปิดใช้งานการรวมแท็ก Handler หรือไม่ นี่คือตัวเลือกการรวบรวม มันจะไม่เปลี่ยนแปลงพฤติกรรมของ JSPs ที่รวบรวมแล้ว (ค่าเริ่มต้นเป็น true )errorOnUseBeanInvalidClassAttribute : Jasper ควรออกข้อผิดพลาดเมื่อค่าของแอตทริบิวต์คลาสในการดำเนินการ USEBEAN ไม่ใช่คลาสถั่วที่ถูกต้อง (ค่าเริ่มต้นเป็น true )genStringAsCharArray : ควรสร้างสตริงข้อความเป็นอาร์เรย์ถ่านเพื่อปรับปรุงประสิทธิภาพในบางกรณี (ค่าเริ่มต้นเป็น false )ieClassId : ค่า class-id ที่จะส่งไปยัง Internet Explorer เมื่อใช้ <jsp:plugin> แท็ก (ค่าเริ่มต้นไปยัง clsid:8AD9C840-044E-11D1-B3E9-00805F499D93 )javaEncoding : การเข้ารหัสไฟล์ Java เพื่อใช้สำหรับการสร้างไฟล์ต้นฉบับ Java (ค่าเริ่มต้นเป็น UTF8 )trimSpaces : ควรมีช่องว่างสีขาวในข้อความเทมเพลตระหว่างการกระทำหรือคำสั่งที่ถูกตัดแต่ง (ค่าเริ่มต้นเป็น TrimSpaces.TRUE )xpoweredBy : กำหนดว่าส่วนหัวการตอบกลับที่เพิ่มขึ้นของ X-powered-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 ของคุณ อย่างไรก็ตามการพึ่งพารุ่นนี้ไม่ได้มีอยู่ใน Maven Central คุณจะต้องดาวน์โหลดการพึ่งพานั้นและวางไว้ในที่เก็บของคุณเองหรือกำหนดที่เก็บบนดิสก์ท้องถิ่นของคุณซึ่งคุณสามารถวางลงได้นี่คือตัวอย่าง:
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 ของคุณ xml ในไดเรกทอรี src/main/webapp/META-INF ในการตั้งค่าตำแหน่งที่กำหนดเองคุณสามารถใช้ Convention configFile นี่คือตัวอย่างเกี่ยวกับวิธีการตั้งค่าสำหรับงาน tomcatRun และ tomcatRunWar
[tomcatRun, tomcatRunWar] * . configFile = file( ' context.xml ' )โปรดดูเอกสาร Tomcat สำหรับรายการแอตทริบิวต์บริบท ตัวอย่างต่อไปนี้แสดงวิธีตั้งค่า DataSource MySQL JNDI
<? 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 และปลั๊กอินด้วย Jrebel ก่อนอื่นดาวน์โหลด jrebel ติดตั้งบนเครื่องของคุณและตั้งค่าใบอนุญาต ในการบอก Jrebel ว่าไดเรกทอรีใดที่จะสแกนรหัสไบต์ที่เปลี่ยนแปลงคุณต้องสร้างไฟล์ rebel.xml ในโมดูลเว็บของคุณวางไฟล์ภายใต้ build/classes/main เพื่อให้สามารถโหลดได้โดยปลั๊กอิน Tomcat สำหรับการสร้างการกำหนดค่าของไฟล์ปลั๊กอิน Gradle Jrebel นั้นมีประโยชน์ ไม่จำเป็นต้องใช้ปลั๊กอิน คุณสามารถตัดสินใจที่จะสร้างการกำหนดค่าด้วยมือ โปรดทราบว่า 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 Agent โปรดตรวจสอบให้แน่ใจว่าได้ตั้งค่าตัวแปรสภาพแวดล้อม 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.* '
}ฉันจะเพิ่มไฟล์ JAR หรือไดเรกทอรีที่ไม่ได้เป็นส่วนหนึ่งของซอร์สโค้ดเว็บแอปพลิเคชันของฉันได้อย่างไร
ทุกงานของประเภท AbstractTomcatRun จะเปิดเผยคุณสมบัติที่ชื่อว่า additionalRuntimeResources ที่ใช้ในการผสมกับ Web Application Runtime ClassPath
[tomcatRun, tomcatRunWar] . each { task ->
task . additionalRuntimeResources << file( ' /Users/bmuschko/config/props ' )
task . additionalRuntimeResources << file( ' /Users/bmuschko/ext/jars/my.jar ' )
}