บันทึกนี้เกี่ยวกับการลดขนาดของ WAR ไฟล์ ที่ได้จาก Grails ให้มีขนาดเล็กลง
ไม่รู้ว่าผมไปอยู่ที่ไหนมาถึงได้พึ่งรู้ว่าเค้าลดขนาด war file ที่เกิดจาก Grails กันแบบนี้ อีกทั้งคุณ @UP1 ยังบอกอีกว่าคุณ @chanwit เคยโชว์ให้ดูแล้วด้วย ใน TGUG ก็มีคุยกันไว้ :-$
ปกติแม้ไม่ได้ทำอะไรเลยเมื่อเราสั่งให้ Grails สร้าง WAR ไฟล์แล้ว เราจะได้ไฟล์ขนาดประมาณ 17M เป็นอย่างน้อยเสมอ ซึ่งถือว่าใหญ่พอสมควรเลยทีเดียว
ส่วนใหญ่แล้วขนาดที่ว่าใหญ่ๆก็จะเป็น JAR ไฟล์ต่างๆที่ Grails ต้อง include รวมเข้ามาด้วย ดังนั้นวิธีลดขนาดก็คือ นำ JAR ไฟล์เหล่านั้นไปวางไว้ใน container หรือ app server ไว้เลย
โดยเริ่มจาก copy ไฟล์ JAR ต่างๆไปวางไว้ที่ $CATALINA_HOME/shared/lib (กรณีที่ใช้ Tomcat, และถ้าไม่มี directory นี้ ให้สร้างขึ้นมาใหม่เอง)
โดยไฟล์ต่างๆที่จะ copy ไปมีดังนี้
- $GRAILS_HOME/dist/*.jar
- $GRAILS_HOME/lib/*.jar
- $GRAILS_PROJECT/plugins/*/lib/*.jar (มาตอนเราติดตั้ง plugin)
- $GRAILS_PROJECT/lib/*.jar (lib ต่างๆเช่น JDBC driver)
จากนั้นบอก Grails ไม่ให้รวม dependencies เข้าใปใน WAR โดยไปเพิ่มบรรทัดนี้ที่ /grails-app/conf/Config.groovy
grails.war.dependencies = {}
จากนั้นเมื่อลองสร้าง WAR file ออกมาจะพบว่าจากเดิมขนาดประมาณ 17M ก็จะลดเหลือประมาณ 2M เท่านั้น
Note: สำหรับ Tomcat 6.0 จะไม่มี shared/lib มาให้ ดังนั้นเราต้องสร้างเองไว้ที่
$CATALINA_HOME/shared/lib
และเข้าไปแก้ไข $CATALINA_HOME/conf/catalina.properties โดยมองหา และแก้ให้เป็นลักษณะนี้
shared.loader=${catalina.base}/shared/lib/*.jar
จากนั้นทดลองนำ WAR ที่ได้ไปโยนลง Tomcat ดูพบว่าใช้งานได้ปกติ
ก่อนหน้านี้ build แต่ละทีแล้ว upload ให้เพื่อน ขนาดมหาศาลทุกที ตอนนี้สบายเลย
ต้นฉบับ : Reducing Grails Deployment Size (by a Lot)
อยากเล็กกว่านี้ไปหนีไปใช้ GlassFish
Related Link from Roti




1 comments:
เดี๋ยวนี้ตอนสั่ง pack เป็น .war สามารถสั่งได้โดยพิมพ์ $> grails war -nojars
แสดงความคิดเห็น