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

作者:@gzdaijie
本文为作者原创,转载请注明出处:http://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,后期将不断更新,欢迎关注。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值