本文作者:黃少存,叩丁狼進階講師。原創文章,轉載請注明出處。
概要:目前很多企業都開始使用Gradle 來進行項目的管理,對于 Java Web 項目來說,war 插件的出現,讓項目部署隻需複制粘貼即可,那有沒有辦法讓 JavaWeb 項目的部署像PC 端軟體一樣輕按兩下某個執行檔案即可?有沒有辦法自動檢測項目的更新,自由編譯與加載進而友善開發人員呢?答案是yes,咱們可以使用 gretty 來實作這些功能.
gretty 支援熱部署,HTTPS,轉發,調試,自動化運作環境等諸多特性,支援jetty,tomcat 等多種 Servlet 容器.接下來咱們就來看下 gretty 最常用的特性和使用方法.
一. 在 Gradle 中安裝 gretty
gretty 安裝很簡單,不過需要下載下傳的依賴比較多,剛開始會慢點.
// build.gradle
// 1 apply 安裝
apply from: 'https://raw.github.com/gretty-gradle-plugin/gretty/master/pluginScripts/gretty.plugin'
// 2 plugins 安裝
plugins {
id 'java'
id 'war'
id "org.akhikhl.gretty" version "2.0.0"
}
以上配置二選一,都可以. 如果 gradle 版本比較舊,可按以下方式來安裝 gretty
// JDK6+,Gradle 1.10+
// build.gradle
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'org.akhikhl.gretty:gretty:+'
}
}
apply plugin: 'org.akhikhl.gretty'
二. 啟動項目常用操作
以上3種配置按 gradle 版本和需求選一種即可,然後可以用指令,gradle appRun 即可啟動.預設使用 jetty9 容器.
IDE 工具操作: idea -> Gradle -> 項目->Task->gretty下很多的操作,都是一個個的指令操作.

2.1 Run 系列
- 1 編譯項目
- 2 啟動 wab-app
- gradle appRun/appRunDebug : 不依賴 war,按鈕停止
- gradle appRunWar/appRunWarDebug : 依賴 war,按鈕停止
- 3 idea : gradle -> task -> gretty
Gradle 進階-gretty一. 在 Gradle 中安裝 gretty二. 啟動項目常用操作三. 預設配置修改四. 其他強大操作
2.2 Start 系列
- 1 編譯項目
- 2 使用新線程開啟服務,等待HTTP請求
- gradle appStart/appStartDebug : 不依賴 war,用 gradle appStop 停止
- gradle appRestart : 不依賴 war 重新開機
- gradle appStartWar/appStartWarDebug : 依賴 war,用 gradle appStop 停止
- 3 idea : gradle -> task -> gretty
Gradle 進階-gretty一. 在 Gradle 中安裝 gretty二. 啟動項目常用操作三. 預設配置修改四. 其他強大操作
2.3 自選擇容器系列
強制使用 jetty/tomcat 容器,包含Run,Start,Stop,功能和 2.1-2.2 相同.
- jettyRun / jettyRunDebug / jettyRunWar / jettyRunWarDebug
- jettyStart / jettyStartDebug / jettyStartWar / jettyStartWarDebug
- tomcatRun / tomcatRunDebug / tomcatRunWar / tomcatRunWarDebug
- tomcatStart / tomcatStartDebug / tomcatStartWar / tomcatStartWarDebug
詳情檢視 : gretty task
三. 預設配置修改
3.1 修改預設Servlet 容器和其常用屬性
gretty {
// 指定預設 Servlet 容器,支援 jetty7/8/9,jetty9.3/9.4(僅 jdk8),tomcat7/8
servletContainer = 'tomcat8'
// 修改伺服器端口
httpPort = 80
// 修改上下文路徑
contextPath = '/'
}
其他預設配置修改: Gretty configuration
3.2 修改預設熱部署配置
Gretty 1.0.0+ 可使用 managedClassReload=true 來啟動即時重新加載已更改的class檔案.也可以手動修改熱部署的屬性.
常用屬性
- scanInterval:監聽周期(秒),設定為 0 則關閉熱部署
- scanDir:需要監聽的檔案夾
- recompileOnSourceChange:監聽源碼變動,自動編譯
- reloadOnClassChange:編譯的類發生改變,自動加載
- reloadOnConfigChange:監聽 WEB-INF 或 META-INF 發生改變
- reloadOnLibChange:監聽依賴發生改變
預設值
- scanInterval = 1 // 每秒掃描加載 1 次
- scanDir 預設值
- ${projectdir}/src/main/java
- ${projectdir}/src/main/groovy
- ${projectdir}/src/main/resources
- ${projectdir}/build/classes/main
- ${projectdir}/build/resources/main
- recompileOnSourceChange = true
- reloadOnClassChange = true
- reloadOnConfigChange = true
- reloadOnLibChange = true
3.3 gretty 對 HTTPS 支援
生成自簽名證書,隻能在開發中使用
// https 配置
gretty {
//httpEnabled = false // 禁用http
httpsEnabled = true // 啟用https 生成自簽名證書
// httpsPort = 443 預設是 8443
}
證書生成位置:
- certificate -> “${project.buildDir}/ssl/cert”
- key-store -> “${project.buildDir}/ssl/keystore”
- key-store and key-manager passwords -> “${project.buildDir}/ssl/properties”
啟動通路 Q GFDSAZhttps 連接配接,注意,此處用的是gretty自簽名證書,并非指向?Certificate Authority (CA).可手動配置引用已經存在的證書.
gretty {
sslKeyStorePath = '/some/path/keystore'
sslKeyStorePassword = 'someKeystorePassword'
sslKeyManagerPassword = 'someKeyManagerPassword'
sslTrustStorePath = '/another/path/trust_keystore'
sslTrustStorePassword = 'someTrustStorePassword'
}
四. 其他強大操作
4.1 gretty 的 debug 調試
在啟動項目常用操作中有很多的 xxxDebug 操作,這些都是 debug 方式運作.不過在 IDE 工具中直接運作沒有效果,在 idea 中可以使用遠端調試來實作 debug 調試.
- 輕按兩下某個 debug 任務,例: appStartDebug
- 配置 idea 遠端調試
- 啟動 idea 遠端調試
- debug 調試
4.1.1. 輕按兩下某個 debug 任務,例: appStartDebug\
4.1.2. 配置 idea 遠端調試
4.1.3. 啟動 idea 遠端調試
- 選擇遠端調試并啟動
Gradle 進階-gretty一. 在 Gradle 中安裝 gretty二. 啟動項目常用操作三. 預設配置修改四. 其他強大操作 - 啟動後控制台資訊
Gradle 進階-gretty一. 在 Gradle 中安裝 gretty二. 啟動項目常用操作三. 預設配置修改四. 其他強大操作 - 等待項目啟動即可進行調試
Gradle 進階-gretty一. 在 Gradle 中安裝 gretty二. 啟動項目常用操作三. 預設配置修改四. 其他強大操作
選擇控制台的 Run 頁籤,觀察項目啟動.啟動成功後就可以請求需要 debug 的資源了.
4.1.4. debug 調試
4.2 gretty 生成可執行項目
gretty 可以類 springboot 的項目打包功能,gretty 可以把一個項目導出成擁有Servlet 容器和啟動程式的項目.還可以将項目整體壓縮,操作如下.
gradle buildProject
生成可執行的項目,生成目錄:build/output/${project.name}
項目結構如下
- conf : 包含伺服器的配置檔案
- runner : 包含Servlet 容器的運作庫
- starter : 包含Servlet 容器部署java程式需要的運作庫
- webapps : 一個或多個你的 web 項目
gradle archiveProduct
生成可執行的項目,生成目錄:build/output/ p r o j e c t . n a m e , 打 包 項 目 為 z i p 包 . 存 在 : b u i l d / o u t p u t / {project.name},打包項目為zip包.存在:build/output/ project.name,打包項目為zip包.存在:build/output/{project.name}-${project.version}.zip
以上gretty 的常用配置和操作就到這裡.詳情可看插件doc