作者:@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/mainrecompileOnSourceChange、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 支持
生成自签名证书,仅在开发时使用
12345gretty {
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连接手动配置
1234567gretty {
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中加入以下内容
12345678910<
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,设置转发规则
1234567891011121314151617// 根地址转发到 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,例如
12345product {
webapp project
// include this project
webapp
':ProjectA'
webapp
':ProjectB'
}
4.2 gradle archiveProduct
- 打包生成的安装文件
- 生成目录位于 build/output/${project.name}
本文同步发布在 Github,后期将不断更新,欢迎关注。