- Gradle http://gradle.org/
- Gradle Jetty Plugin http://gradle.org/docs/current/userguide/jetty_plugin.html
但是 jettyRun 或 jettyRunWar task 預設只會啟動 8080 的 Http Server,在某情況下,我們可能需要搭配 Apache 或 Nginx,不管是為了做 load balance 或是讓 local vm 可以對外提供服務,都會用到 AJP。
Jetty 或 Tomcat 等廣泛被使用的 JavaEE Container 都支援 AJP(Apache JServ Protocol) socket connector,它可以讓 Apache(或 Nginx)與 Jetty(或 Tomcat)之間的串接效果更好,包括更好的效能及 SSL 支援等。
關於 Tomcat 及 Nginx 的設定可以參考:
- Apache Tomcat - The AJP Connector http://tomcat.apache.org/tomcat-5.5-doc/config/ajp.html
- Apache Tomcat Connector http://tomcat.apache.org/connectors-doc/generic_howto/workers.html
- support AJP protocol proxy with Nginx https://github.com/yaoweibin/nginx_ajp_module
介紹 Jetty + AJP 的文章不少,例如 Eclipse Wiki 提供這篇(Jetty 新版本已由 Eclipse 托管):
- Jetty Howto Configure AJP13 http://wiki.eclipse.org/Jetty/Howto/Configure_AJP13
不難發現 Jetty 要開啟 AJP 只是在設定中增加一個 Ajp13SocketConnector,但如果要用 Gradle 內建的 Jetty Plugin 完成這件事,用「gradle Ajp13SocketConnector」卻找不到什麼參考資料。
經過一番試驗,發現這個修改可以作用:
- 增加一個自訂的 src/main/resources/jetty.xml,對 Jetty Server 執行 addConnector 呼叫。
- 在 build.gradle 增加 jetty-ajp dependencies 及 jettyConfig、additionalRuntimeJars 設定。
如此一來,使用 Gradle 建置的 Java Web App,不僅可以輕鬆將 Jetty 用於測試階段,也可以實際透過 AJP 搭配 Apache/Nginx 提供服務。(正式產品還是建議先用 Gradle 打包成 .war 檔再 deploy 到 production server。)
https://gist.github.com/1832631
沒有留言:
張貼留言