Java Web Gradle插件之gretty簡明指南

来源:http://www.cnblogs.com/gzdaijie/archive/2016/03/11/5267166.html
-Advertisement-
Play Games

作者: "@gzdaijie" 本文為作者原創,轉載請註明出處:http://www.cnblogs.com/gzdaijie/p/5267166.html Java Web應用開發時常使用Gradle來進行項目管理,可以十分便利地解決包依賴等問題。war插件的出現,讓項目部署成為一個複製粘貼的過程


作者:@gzdaijie
本文為作者原創,轉載請註明出處:http://www.cnblogs.com/gzdaijie/p/5267166.html


    Java Web應用開發時常使用Gradle來進行項目管理,可以十分便利地解決包依賴等問題。war插件的出現,讓項目部署成為一個複製粘貼的過程,那有沒有辦法讓Java web應用的部署,就像windows下安裝軟體,雙擊一下就可以呢?又或者Java web應用開發過程中,有沒有辦法自動檢測項目變化,自動編譯與載入呢?

    gretty支持熱部署、HTTPS、轉發、調試、自動化運行環境等諸多特性,讓開發和部署變得更加簡單。本文將介紹gretty插件的最常用的幾種特性和使用方法,適合對使用過Java web和Gradle的童鞋。如果錯誤,請不吝指出,非常感謝;如本文對你有用,右下角點個推薦吧!

1.安裝gretty

// JDK6+,Gradle 1.10+
// build.gradle
buildscript {
    repositories {
         jcenter()
    }
    dependencies {
         classpath 'org.akhikhl.gretty:gretty:+'
    }
}

apply plugin: 'org.akhikhl.gretty'

apply from: 'https://raw.github.com/akhikhl/gretty/master/pluginScripts/gretty.plugin'

2.常用命令

2.1 gradle appRun

  • 編譯當前項目
  • 不依賴於war任務
  • 另有appRunWar、appRunDebug、appRunWarDebug

2.2 gradle appStart

  • 編譯當前項目
  • 使用新java線程開啟服務,監聽埠,等待HTTP請求
  • 不依賴於war任務
  • 不主動關閉服務,即一直在運行,需用gradle appStop關閉
  • 另有appStartWar、appStartDebug、appStartWarDebug

2.3 gradle jetty* / gradle tomcat*

  • 包含Start、Run、Stop等,與2.1-2.2用法一致

3.核心特性

3.1 選擇servlet 容器

gretty {
    // 埠預設8080
    // serlvetContainer 支持 jetty7/8/9,tomcat7/8
    // contextPath 設置根路徑,預設為項目名稱
    port = 8081 
    serlvetContainer = 'jetty9'  
    contextPath = '/'
}

3.2 熱部署(Gretty 1.1.5+)

常用屬性

  • scanInterval:監視周期,單位為秒,設置為0等於完全關閉熱部署
  • scanDir:需要監視的文件夾
  • recompileOnSourceChange:監視源碼變動,自動編譯
  • reloadOnClassChange:編譯的類發生改變,自動載入
  • reloadOnConfigChange:WEB-INF或META-INF發生改變
  • reloadOnLibChange:依賴發生改變

Gretty預設如下

  • 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、reloadOnClassChange、reloadOnConfigChange 和 reloadOnLibChange預設為true

3.3 快速載入

  • fastReload屬性,預設為true,監聽webapp/中的內容,文件發生改變,無需重啟。

3.4 添加新的資源目錄

// 除了src/main/webapp外,可另外指定資源目錄
gretty{
    // ...
    extraResourceBase 'dir1',
    extraResourceBases 'dir2','dir3'
    // ...
}

3.5 HTTPS 支持

  • 生成自簽名證書,僅在開發時使用

    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連接

  • 手動配置

    gretty {
    sslKeyStorePath = '/some/path/keystore'
    sslKeyStorePassword = 'someKeystorePassword'
    sslKeyManagerPassword = 'someKeyManagerPassword'
    sslTrustStorePath = '/another/path/trust_keystore'
    sslTrustStorePassword = 'someTrustStorePassword'
    }

3.6 轉發(Gretty 1.1.7+)

  • 步驟1:在WEB-INF/web.xml中加入以下內容

    <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>
  • 步驟2:創建WEB-INF/filter.groovy,設置轉發規則

    // 根地址轉發到 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)
    }

3.7 調試(Debug)

// 為所有的debug命令配置參數
gretty {
  debugPort = 5005      // 預設
  debugSuspend = true   // 預設
}
// 僅針對appRunDebug
gretty {
  afterEvaluate {
    appRunDebug {
      debugPort = 5005
      debugSuspend = true
    }
  }
}

4.產品生成

4.1 gradle buildProduct

  • 生成安裝文件
  • 生成目錄位於 build/output/${project.name}
  • 結構如下

    --build/output/${project.name}
    |--conf/     => 配置文件
    |--runner/  => servlet container 所需庫 
    |--starter/  
    |--webapps/   => java web 應用
    |--restart.bat/sh
    |--run.bat/sh
    |--start.bat/sh
    |--stop.bat/sh
  • 多應用,需在build.gradle中配置 product,例如

    product {
      webapp project // include this project
      webapp ':ProjectA'
      webapp ':ProjectB'
    }

4.2 gradle archiveProduct

  • 打包生成的安裝文件
  • 生成目錄位於 build/output/${project.name}

本文同步發佈在 Github,後期將不斷更新,歡迎關註。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • NuGet is a Visual Studio extension that makes it easy to install and update third-party libraries and tools in Visual Studio. NuGet is not mandatory f
  • 什麼是通用語言運行時(CLR),簡單來講: CLR是一個支持多種編程語言及多語言互操作,完整的高級虛擬機。 有點拗口,而且不是很有啟發性,但上面的文字是將又大又複雜的CLR的功能歸類以便容易理解的第一步。它從一萬英尺的高度來幫助我們理解CLR的設計目標。從這個高度明瞭CLR之後,我們可以深入其各個組
  • 葡萄城近日與微軟公司達成合作,將Wijmo 產品線的HTML5和JaveScript 控制項融合到微軟Dynamics CRMOnline 2016版中。
  • 隨手記記 先定義下標誌枚舉: 在項目的model文件夾下新建一個IsEnums.cs類 [Flags] public enum ABC {a=1,b=2,c=4, } 然後在HomeController.cs類中引用下model, 用標誌枚舉的好處就是可以進行自由組合,而標誌枚舉里定義每個都是2的N
  • 規則引擎由推理引擎發展而來,是一種嵌入在應用程式中的組件,實現了將業務決策從應用程式代碼中分離出來,並使用預定義的語義模塊編寫業務決策。接受數據輸入,解釋業務規則,並根據業務規則做出業務決策。比較常見的業務規則引擎有Drools、VisualRules 和iLog。這裡介紹另外一個C#開源工具Rul
  • 1.設置百分比顯示而且是自適應。 2. meta標簽設置 ios:正確設置 <meta name="viewport" content="width=device-width;" /> :錯誤設置 <meta name="viewport" content="width=device-width"
  • 本文介紹在不使用PIL的情況下,使用Python保存截屏並保存屏幕截圖到.bmp文件。通過ctypes庫使用C指針來對記憶體進行操作。
  • Atitit.編程語言and 自然語言的比較and 編程語言未來的發展 1. 單詞的間隔靠空格,編程的單詞的間隔靠分界符..1 2. 語句分界符:自然語言使用逗號,編程語言使用分號1 3. 換行1 4. 段落and fun method2 5. 上下文相關2 6. 操作泛型化2 7. 動詞和名詞之間
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...