博客逐步遷移至 極客兔兔的小站html
Java Web應用開發時常使用Gradle來進行項目管理,能夠十分便利地解決包依賴等問題。war插件的出現,讓項目部署成爲一個複製粘貼的過程,那有沒有辦法讓Java web應用的部署,就像windows下安裝軟件,雙擊一下就能夠呢?又或者Java web應用開發過程當中,有沒有辦法自動檢測項目變化,自動編譯與加載呢?java
gretty支持熱部署、HTTPS、轉發、調試、自動化運行環境等諸多特性,讓開發和部署變得更加簡單。本文將介紹gretty插件的最經常使用的幾種特性和使用方法,適合對使用過Java web和Gradle的童鞋。若有錯誤,請不吝指出,很是感謝;如本文對你有用,右下角點個推薦吧!git
// JDK6+,Gradle 1.10+ // build.gradle buildscript { repositories { jcenter() } dependencies { classpath 'org.akhikhl.gretty:gretty:+' } } apply plugin: 'org.akhikhl.gretty'
或github
apply from: 'https://raw.github.com/akhikhl/gretty/master/pluginScripts/gretty.plugin'
gretty { // 端口默認8080 // serlvetContainer 支持 jetty7/8/9,tomcat7/8 // contextPath 設置根路徑,默認爲項目名稱 port = 8081 serlvetContainer = 'jetty9' contextPath = '/' }
經常使用屬性web
Gretty默認以下windows
scanDir默認爲下 :tomcat
${projectdir}/src/main/java
${projectdir}/src/main/groovy
${projectdir}/src/main/resources
${projectdir}/build/classes/main
${projectdir}/build/resources/mainapp
recompileOnSourceChange、reloadOnClassChange、reloadOnConfigChange 和 reloadOnLibChange默認爲truewebapp
webapp/
中的內容,文件發生改變,無需重啓。// 除了src/main/webapp外,可另外指定資源目錄 gretty{ // ... extraResourceBase 'dir1', extraResourceBases 'dir2','dir3' // ... }
gretty { httpsEnabled = true // httpEnabled = false 禁用http // httpsPort = 443 httpsPort默認爲 8443 }
certificate → "${project.buildDir}/ssl/cert"
key-store → "${project.buildDir}/ssl/keystore"
key-store and key-manager passwords→"${project.buildDir}/ssl/properties"
key-store → 配置HTTPS鏈接gradle
gretty { sslKeyStorePath = '/some/path/keystore' sslKeyStorePassword = 'someKeystorePassword' sslKeyManagerPassword = 'someKeyManagerPassword' sslTrustStorePath = '/another/path/trust_keystore' sslTrustStorePassword = 'someTrustStorePassword' }
<filter> <filter-name>RedirectFilter</filter-name> <filter-class>org.akhikhl.gretty.RedirectFilter</filter-class> </filter> <filter-mapping> <filter-name>RedirectFilter</filter-name> <url-pattern>/*</url-pattern> <dispatcher>REQUEST</dispatcher> <dispatcher>FORWARD</dispatcher> </filter-mapping>
// 根地址轉發到 index.html filter relPath: '/', { forward 'index.html' } // 舊地址轉發到新地址 filter relPath: '/old/path', { redirect contextPath + '/new/path' } // 地址參數轉爲查詢參數 filter relPath: ~'/path/(.*)', { matches -> redirect new URIBuilder(requestURI).setPath(contextPath + '/anotherPath') .setQuery(matches.relPath[0][1]) } // 將HTTP流量所有轉發至HTTPS filter scheme: 'http', { redirect new URIBuilder(requestURI).setScheme('https').setPort(httpsPort) }
// 爲全部的debug命令配置參數 gretty { debugPort = 5005 // 默認 debugSuspend = true // 默認 }
// 僅針對appRunDebug gretty { afterEvaluate { appRunDebug { debugPort = 5005 debugSuspend = true } } }
--build/output/${project.name} |--conf/ => 配置文件 |--runner/ => servlet container 所需庫 |--starter/ |--webapps/ => java web 應用 |--restart.bat/sh |--run.bat/sh |--start.bat/sh |--stop.bat/sh
product { webapp project // include this project webapp ':ProjectA' webapp ':ProjectB' }
本文同步發佈在 Github,後期將不斷更新,歡迎關注。