本文探討如何高效快速地開發和調試基於gradle管理的web應用。
gradle是新一代應用構建、版本發佈管理工具,功能強大而靈活,號稱將取代maven的霸主地位,可是目前在開發和調試web應用程序方面還有不少不足,效率低下。
那麼咱們能不能基於gradle強大而靈活的功能,探尋出一種簡單、高效、便捷的方法,以便在調試web應用過程當中修改程序無需重啓應用服務器和應用呢?答案是確定的,接下來就給你們分享bboss開發團隊在使用gradle開發調試web應用所使用的行之有效的工具和方法。
工具和方法涉及的技術
1.gradle自定義sourceSet測試源碼集技術
2.jetty嵌入式啓動技術
3.gradle compileOnly級別包依賴技術(gradle 3.0及以上版本支持)
4.採用bboss ioc管理jetty 應用配置
工具集成和使用
咱們直接使用本文附件中包含的工具小程序來調試web應用,這是一個通用的小工具,能夠按照如下步驟將這個工具集成到本身web應用對應的gradle工程中。注意:咱們將工具對應的程序放置到工程的測試源碼目錄下面,將工具依賴的jar包級別定義爲compileOnly,這樣能夠避免將工具對應的程序、配置和jar發佈到最終的項目版本中(真正的綠色無污染)。
第一步 集成調試web應用工具
工具包含啓動jetty容器的程序和配置文件,這些文件包含在本文附件中,點擊這裏下載:下載
將解壓後的test目錄中的org目錄複製到gradle工程的測試源碼目錄下便可,gradle能夠靈活指定項目的測試源碼目錄,本文對應的是test目錄,經過其中的類org.eclipse.jetty.webapp.JettyStart來啓動和調試web應用。
下面說明一下目錄test\org\eclipse\jetty\webapp下面三個文件的做用:
1.jetty.xml
文件內容: html
文件做用:配置jetty端口port,應用上下文context,應用部署描述文件web.xml位置,應用路徑resourceBase,這兩個路徑都是相對於gradle工程根目錄,能夠根據須要調整相關配置。
2.webdefault.xml
這個文件內容比較多,已經配置好,無需修改,咱們只需關注其中一個配置項
useFileMappedBuffer: java
useFileMappedBuffer必須設置爲false,不然在調試的過程當中js文件會被鎖定,致使js文件沒法進行修改。
3. JettyStart.java
在JettyStart的Main方法中,利用bboss ioc加載配置文件jetty.xml,而後啓動jetty服務器和web應用。經過執行JettyStart程序,就能夠像調試和運行普通的java程序同樣調試和運行gradle管理web應用,能夠在調試過程當中自動加載修改的程序和資源配置文件,避免因修改程序而反覆構建、發佈和部署應用,大大提高開發和調試的效率。目前工具只支持Http協議,能夠經過擴展JettyStart類方便地提供對Https協議的支持。
上述的三個文件中,只有jetty.xml會根據項目的實際狀況進行修改和調整,通常狀況下其餘兩個文件不須要改動,除非在調試過程當中須要使用更多的jetty功能,好比增長對https協議的支持,那麼能夠經過修改JettyStart.java程序並在jetty.xml文件中增長相關的配置項,就能夠靈活地實現。
第二步 配置工具依賴並加載工具源碼和配置文件集
在工程的build.gradle文件中配置工具依賴並加載工具源碼和配置文件集
1.修改自定義源碼集
在test測試源碼塊中加載工具對應源程序和配置文件(兩個xml文件和一個java類) web
2.在dependencies添加運行jetty容器和web應用所需的jar包
以compileOnly級別添加啓動jetty容器和web應用所需的第三方jar包,這樣在最終發佈應用版本中不會包含這些額外引入jar包: apache
本文的附件中(下載)包含了能夠做爲參考的build.gradle樣例。
第三步 運行和調試web應用
完成第一步和第二步後,咱們就能夠經過JettyStart程序來運行和調試web應用了,
首先在web工程右鍵菜單中gradle sts插件的Refresh All功能來刷新和加載最新的build.gradle配置文件,如圖示:
而後參考如下圖示來調試或者運行 JettyStart,便可調試或者運行gradle管理的web應用了:
小程序
www.togv.net/guanlipeixun/4ws6xllk3xl3ciz8reaf.htmapi
www.togv.net/guanlipeixun/nscr433em4n4niblrnex.htm服務器
www.365128.com/user/aqiandao/65.htmlapp
www.365128.com/user/aqiandao/66.htmlfrontend
www.365128.com/user/aqiandao/67.htmleclipse
www.365128.com/user/aqiandao/68.html
www.365128.com/user/aqiandao/70.html
www.365128.com/user/aqiandao/71.html
www.365128.com/user/aqiandao/72.html
www.365128.com/user/aqiandao/64.html