博客逐步迁移至 极客兔兔的小站

    Java Web应用开发时常使用Gradle来进行项目管理,可以十分便利地解决包依赖等问题。war插件的出现,让项目部署成为一个复制粘贴的过程,那有没有办法让Java web应用的部署,就像windows下安装软件,双击一下就可以呢?又或者Java web应用开发过程中,有没有办法自动检测项目变化,自动编译与加载呢?

    gretty支持热部署、HTTPS、转发、调试、自动化运行环境等诸多特性,让开发和部署变得更加简单。本文将介绍gretty插件的最常用的几种特性和使用方法,适合对使用过Java web和Gradle的童鞋。如有错误,请不吝指出,非常感谢;如本文对你有用,右下角点个推荐吧!

1.安装gretty

  1. // JDK6+,Gradle 1.10+
  2. // build.gradle
  3. buildscript {
  4. repositories {
  5. jcenter()
  6. }
  7. dependencies {
  8. classpath 'org.akhikhl.gretty:gretty:+'
  9. }
  10. }
  11. apply plugin: 'org.akhikhl.gretty'

  1. 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 容器

  1. gretty {
  2. // 端口默认8080
  3. // serlvetContainer 支持 jetty7/8/9,tomcat7/8
  4. // contextPath 设置根路径,默认为项目名称
  5. port = 8081
  6. serlvetContainer = 'jetty9'
  7. contextPath = '/'
  8. }

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 添加新的资源目录

  1. // 除了src/main/webapp外,可另外指定资源目录
  2. gretty{
  3. // ...
  4. extraResourceBase 'dir1',
  5. extraResourceBases 'dir2','dir3'
  6. // ...
  7. }

3.5 HTTPS 支持

  • 生成自签名证书,仅在开发时使用
  1. gretty {
  2. httpsEnabled = true
  3. // httpEnabled = false 禁用http
  4. // httpsPort = 443 httpsPort默认为 8443
  5. }

certificate → "${project.buildDir}/ssl/cert"

key-store → "${project.buildDir}/ssl/keystore"

key-store and key-manager passwords→"${project.buildDir}/ssl/properties"

key-store → 配置HTTPS连接

  • 手动配置
  1. gretty {
  2. sslKeyStorePath = '/some/path/keystore'
  3. sslKeyStorePassword = 'someKeystorePassword'
  4. sslKeyManagerPassword = 'someKeyManagerPassword'
  5. sslTrustStorePath = '/another/path/trust_keystore'
  6. sslTrustStorePassword = 'someTrustStorePassword'
  7. }

3.6 转发(Gretty 1.1.7+)

  • 步骤1:在WEB-INF/web.xml中加入以下内容
  1. <filter>
  2. <filter-name>RedirectFilter</filter-name>
  3. <filter-class>org.akhikhl.gretty.RedirectFilter</filter-class>
  4. </filter>
  5. <filter-mapping>
  6. <filter-name>RedirectFilter</filter-name>
  7. <url-pattern>/*</url-pattern>
  8. <dispatcher>REQUEST</dispatcher>
  9. <dispatcher>FORWARD</dispatcher>
  10. </filter-mapping>
  • 步骤2:创建WEB-INF/filter.groovy,设置转发规则
  1. // 根地址转发到 index.html
  2. filter relPath: '/', {
  3. forward 'index.html'
  4. }
  5. // 旧地址转发到新地址
  6. filter relPath: '/old/path', {
  7. redirect contextPath + '/new/path'
  8. }
  9. // 地址参数转为查询参数
  10. filter relPath: ~'/path/(.*)', { matches ->
  11. redirect new URIBuilder(requestURI).setPath(contextPath + '/anotherPath')
  12. .setQuery(matches.relPath[0][1])
  13. }
  14. // 将HTTP流量全部转发至HTTPS
  15. filter scheme: 'http', {
  16. redirect new URIBuilder(requestURI).setScheme('https').setPort(httpsPort)
  17. }

3.7 调试(Debug)

  1. // 为所有的debug命令配置参数
  2. gretty {
  3. debugPort = 5005 // 默认
  4. debugSuspend = true // 默认
  5. }
  1. // 仅针对appRunDebug
  2. gretty {
  3. afterEvaluate {
  4. appRunDebug {
  5. debugPort = 5005
  6. debugSuspend = true
  7. }
  8. }
  9. }

4.产品生成

4.1 gradle buildProduct

  • 生成安装文件
  • 生成目录位于 build/output/${project.name}
  • 结构如下
  1. --build/output/${project.name}
  2. |--conf/ => 配置文件
  3. |--runner/ => servlet container 所需库
  4. |--starter/
  5. |--webapps/ => java web 应用
  6. |--restart.bat/sh
  7. |--run.bat/sh
  8. |--start.bat/sh
  9. |--stop.bat/sh
  • 多应用,需在build.gradle中配置 product,例如
  1. product {
  2. webapp project // include this project
  3. webapp ':ProjectA'
  4. webapp ':ProjectB'
  5. }

4.2 gradle archiveProduct

  • 打包生成的安装文件
  • 生成目录位于 build/output/${project.name}

本文同步发布在 Github,后期将不断更新,欢迎关注。

Java Gradle入门指南之gretty插件(安装、命令与核心特性)的更多相关文章

  1. Java Gradle入门指南之简介、安装与任务管理

        这是一篇Java Gradle入门级的随笔,主要介绍Gradle的安装与基本语法,这些内容是理解和创建build.gradle的基础,关于Gradle各种插件的使用将会在其他随笔中介绍.    ...

  2. Java Gradle入门指南之插件管理(类型、导入及java plugin使用)

        上一篇随笔介绍了如何使用Gradle内建任务,介绍了自定义Gradle任务类的三种方法(build文件,buildSrc文件夹.新建groovy项目),一个任务是一个原子操作,即不可分割的.项 ...

  3. Java Gradle入门指南之内建与定制任务类(buildSrc、Groovy等)

        上一篇随笔介绍了Gradle的安装与任务管理,这篇着重介绍Gradle的内建任务(in-built tasks)与自定义任务(custom tasks),借助Gradle提供的众多内建任务类型 ...

  4. Java Gradle入门指南之依赖管理(添加依赖、仓库、版本冲突)

        开发任何软件,如何管理依赖是一道绕不过去的坎,软件开发过程中,我们往往会使用这样那样的第三方库,这个时候,一个好的依赖管理就显得尤为重要了.作为一个自动构建工作,Gradle对依赖管理有着很好 ...

  5. 【OpenCV入门指南】第一篇 安装OpenCV

    http://blog.csdn.net/morewindows/article/details/8225783/ win10下vs2015配置Opencv3.1.0过程详解(转) http://ww ...

  6. webpack常用的插件安装命令

    webpack常用的插件安装命令:1:npm install html-webpack-plugin --save-dev //自动快速的帮我们生成HTML.2:npm install css-loa ...

  7. ElasticSearch之常用插件安装命令

    #head监控安装,推荐 bin/plugin -install mobz/elasticsearch-head #bigdesk集群状态,推荐 bin/plugin -install lukas-v ...

  8. Redis入门指南之二(安装及配置)

    本节主要内容 1. 前言2. redis安装3. 启动和停止Redis 1. 前言 安装Redis需要知道自己需要哪个版本,有针对性的安装,比如如果需要redis GEO这个地理集合的特性,那么red ...

  9. java RMI入门指南

    感觉这篇文章不错,直接转了 RMI全称是Remote Method Invocation-远程方法调用,Java RMI在JDK1.1中实现的,其威力就体如今它强大的开发分布式网络应用的能力上,是纯J ...

随机推荐

  1. MUI(4)

    今天感觉无聊,想听一首音乐.没有添加其他页面,只是在index_list.html页面进行代码添加而已. <!doctype html> <html> <head> ...

  2. PHP两个数组相加

    在PHP中,当两个数组相加时,会把第二个数组的取值添加到第一个数组上,同时覆盖掉下标相同的值: <?php $a = array("a" => "apple& ...

  3. 高效 Java Web 应用开发框架 JessMA v3.2.2 正式发布

    JessMA(原名:Portal-Basic)是由 JessMA Open Source 开发的一套高效 Java Full-Stack Web 应用开发框架,内置可扩展的 MVC Web 基础架构和 ...

  4. MySQL 运行环境建议规范

    一.操作系统环境 操作系统版本选择 CentOS/RHRL/ORACLE Linux 5.x/6.x x86_64 发行版 建议磁盘分区规则 MySQL 运行环境建议规范 挂载点 大小 分区类型 分区 ...

  5. win server 2008 r2 sharepoint 域环境安装经历

    环境: 物理机:win7(x64,计算机名字:wyman-pc,ip:192.168.10.102)  / sql server 2008 r2(x64) /VM10 虚拟机:win svr 2008 ...

  6. MontageJS:构建现代 Web App 的 HTML5 框架

    MontageJS 可以帮助您构建高可扩展性和可维护性的 HTML5 应用.有了 MontageJS,开发人员可以创建可重用的用户界面组件和模块,组件和控制器之间的绑定属性,并且同步 DOM 查询和更 ...

  7. 微信中a链接无法进行跳转

    [问题]微信页面开发时,各个主页之间的跳转,完全是通过a链接进行的,但是来回跳转几次,再次从其他主页面跳回首页的时候,微信头部出现了跳转加载进度条,但是就是不跳转,也没有任何反应 [范围]只出现在微信 ...

  8. ae_将面积小于1500的Feature同附近Feature进行合并

    private void 合并1500图斑ToolStripMenuItem_Click(object sender, EventArgs e) { /* *将图层中面积小于1500的图斑与之相同BS ...

  9. sharepoint项目遇到的WebDAV和HTTP PUT的安全隐患解决办法

    最近一个项目,客户进行了安全检测,检测出如下安全隐患,其实这些隐患全是IIS设置的事情   许多人误认为SharePoint是在使用由IIS提供的WebDAV功能. 实际上, SharePoint在S ...

  10. MSCRM 2011/2013/2015 修改显示记录数

    本文地址:http://www.cnblogs.com/Earson/p/4256213.html 1.针对全局的显示记录数最大值设置 在CRM2011产品中的后台MSCRM_Config数据库中表名 ...