您的位置:首页 > 编程语言 > Java开发

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

2016-03-11 20:46 465 查看

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


    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,后期将不断更新,欢迎关注。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: