本文为作者原创,转载请注明出处:https://www.cnblogs.com/gzdaijie/p/5267166.html

目录

1.安装gretty
2.常用命令
2.1 gradle appRun
2.2 gradle appStart
2.3 gradle jetty* / gradle tomcat*
3.核心特性
3.1 选择servlet 容器
3.2 热部署(Gretty 1.1.5+)
3.3 快速加载
3.4 添加新的资源目录
3.5 HTTPS 支持
3.6 转发(Gretty 1.1.7+)
3.7 调试(Debug)
4.产品生成
4.1 gradle buildProduct
4.2 gradle archiveProduct

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

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

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

1.安装gretty

1
2
3
4
5
6
7
8
9
10
11
12
// JDK6+,Gradle 1.10+
// build.gradle
buildscript {
    repositories {
         jcenter()
    }
    dependencies {
         classpath 'org.akhikhl.gretty:gretty:+'
    }
}
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
2
3
4
5
6
7
8
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 添加新的资源目录

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

3.5 HTTPS 支持

  • 生成自签名证书,仅在开发时使用

    1
    2
    3
    4
    5
    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连接

  • 手动配置

    1
    2
    3
    4
    5
    6
    7
    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中加入以下内容

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <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,设置转发规则

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    // 根地址转发到 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)

1
2
3
4
5
// 为所有的debug命令配置参数
gretty {
  debugPort = 5005      // 默认
  debugSuspend = true   // 默认
}

1
2
3
4
5
6
7
8
9
// 仅针对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,例如

    1
    2
    3
    4
    5
    product {
      webapp project // include this project
      webapp ':ProjectA'
      webapp ':ProjectB'
    }

4.2 gradle archiveProduct

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

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

Java Gradle入门指南之gretty插件(安装、命令与核心特性)相关推荐

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

    Java Gradle入门指南之依赖管理(添加依赖.仓库.版本冲突) 作者:@gzdaijie 本文为作者原创,转载请注明出处:http://www.cnblogs.com/gzdaijie/p/52 ...

  2. java gradle入门_Gradle入门:我们的第一个Java项目

    java gradle入门 这篇博客文章描述了如何使用Gradle编译和打包一个简单的Java项目. 我们的Java项目只有一个要求: 我们的构建脚本必须创建一个可执行的jar文件. 换句话说,我们必 ...

  3. Matlab编程入门指南:简介、安装、学习路线和几十个编程案例分析。

    一.Matlab编程入门指南:简介.安装.学习路线和几十个编程案例分析. 1.Matlab编程语言是一种广泛应用于科学计算.工程计算.数据分析.统计分析.信号处理等领域的高级数值计算和数据可视化软件. ...

  4. 达梦数据库入门指南(一)- 安装与初始化教程(Linux)

    一.简介 DM数据库是达梦数据库有限公司基于ORACLE数据库推出的一款关系型数据库,以RDBMS为核心.SQL为标准,支持 SQL92/SQL99.ODBC.JDBC.PHP..NET Provid ...

  5. Java Gradle 入门与实践

    目录 一.Gradle初识 1.1.安装与配置 1.1.1.下载 1.1.2.解压 1.1.3.配置 1.1.4.验证 1.1.5.Idea配置 1.2.构建gradle项目 1.2.1.原始构建 1 ...

  6. apache camel 相关配置_Apache Camel的Java编程入门指南

    Apache Camel是一个非常实用的规则引擎库,能够用来处理来自于不同源的事件和信息.你可以在使用不同的协议比如VM,HTTP,FTP,JMS甚至是文件系统中来传递消息,并且让你的操作逻辑和传递逻 ...

  7. DreamFactory入门指南 - 第2章安装和配置DreamFactory

    第2章安装和配置DreamFactory 在本章中,您将学习如何安装和配置DreamFactory.提供了许多安装解决方案,包括GitHub存储库,点击式安装程序,Docker容器和特定于云的安装程序 ...

  8. Java初学者入门指南

    今天群里的Java编程初学者问我接触Java语言程序的时候,不知道该学习掌握哪些必要的基础知识.总结了零基础学习Java编程语言的几个基础知识要点.希望能够对刚入门的Java新手有帮助 一丶先了解什么 ...

  9. Hexo 入门指南(二) - 安装、初始化和配置

    安装和初始化 linux下打开bash,win下面打开cmd,输入: $ npm install hexo -g $ hexo init blog $ cd blog $ npm install $ ...

最新文章

  1. PHP教程中验证正整数is_int($value+0),为什么要这样?
  2. bae 3.0 mysql_bae3.0 mysql 有时报错?报错-问答-阿里云开发者社区-阿里云
  3. calendar当前时间整点_时间处理相关类
  4. [leetcode] 72. 编辑距离(二维动态规划)
  5. xamarin android pdf,Xamarin.Android - 下载pdf和视频到应用空间并打开
  6. 用好这几款炼丹利器,调参从此得心应手 | Let's Fork
  7. 计算机专业科普知识图文并茂,科普下计算机专业需要什么基础知识?
  8. 无序数组求第k大的数 python_【python刷题】寻找数组中第K大/小的数
  9. Springboot 通过Ftp协议下载文件,并在Vue平台上显示其内容
  10. mongodb 可是化_Mongodb GUI可视化管理工具推荐
  11. 洛谷 1373 dp 小a和uim之大逃离 良心题解
  12. pandas 处理 csv
  13. PCM音频设备的操作(转)
  14. python怎么修改默认路径_Python小知识之JupyterLab默认启动路径修改
  15. H3CNE,H3CSE知识点,重点汇总。
  16. 光学动作捕捉系统构成
  17. 国内有哪些不错的计算机视觉团队?
  18. nginx 499 错误的解决
  19. 通过EverEdit工具连接Linux系统远程操作文件
  20. 802.11n和802.11ac的MCS速率表

热门文章

  1. 字库软件-字模III
  2. Adobe系列软件大全
  3. Linux——SAMBA文件共享
  4. 软考-中级-网络工程师-笔记-第1章-计算机网络概论
  5. 树莓派 摄像头mjpg-streamer视频推流+开机自启动
  6. 机器学习笔记之深度信念网络(二)模型构建思想(RBM叠加结构)
  7. PTA第02章练习题(Python)
  8. bootstrap 详细教程笔记
  9. 五分之四的不同表达式_五分之四表示什么?还可以表示什么?
  10. Vue Cannot read property ‘xxx‘ of undefined