Gradle提供了开箱即用的插件用于组装WAR文件,以及将其部署到本地Servlet容器中。
使用War以及Jetty插件:
War插件扩展了Java插件:添加了一些用于web应用开发的约定,以及对组装WAR文件的支持。Jetty带了一个嵌入式的容器实现,就是通过给你的应用添加一个HTTP模块。Gralde的Jetty插件扩展了WAR插件,它提供了一些任务用来把web应用部署到嵌入式的容器中并运行你的应用。
既然War插件扩展了Java插件,实际上,这就意味着在你的构建脚本中就不再需要Java插件了,因为War插件会自动引入Java插件。
apply plugin: 'war'
web应用的源文件默认是存放在src/main/webapp中
web应用用到了javax.servlet.HttpServlet,不属于Java标准版的部分,因此要指定此依赖。
利用providedCompile:用于一些在编译要用到,但由运行时环境提供的依赖。在此,运行时环境是Jetty。结果,标记为provided的依赖不会打包进War中。运行时依赖例如JSTL在
编译过程中用不到,但在运行时用到,因此会放入war中。
dependencies {
providedCompile 'javax.servlet:servlet-api:2.5'
runtime 'javax.servlet:jstl:1.1.2'
}
构建项目:
$ gradle build
组装好的war位于build/libs中。
默认,war文件名是根据项目的目录名得来的。
接下来,我们来讨论对于非标准布局的配置:
.
├── build.gradle
├── src
│ └── main
│ └── java
│ └── ...
├── static
│ └── css
│ ├── base.css
│ └── bg.png
└── webfiles
├── WEB-INF
│ └── web.xml
└── jsp
├── index.jsp
└── todo-list.jsp
配置如下:
webAppDirName = ‘webfiles’
war {
from ‘static’
}
你可以查看War插件的DSL指南来了解它的一些配置参数。
用一个嵌入式的web容器运行你的应用:
apply plugin: 'jetty'
用于运行web应用的任务是jettyRun:
$ gradle jettyRun
:compileJava
:processResources UP-TO-DATE
:classes
> Building > :jettyRun > Running at http://localhost:8080/todo-webapp-jetty
默认端口号是8080,上下文路径就是你的项目名
快速应用开发:
一些改动就要重启容器会浪费时间。Jetty插件允许你不重启容器就能修改静态资源以及JSP文件。另外,对于class文件的变动,可以利用JRebel(一种字节码交换技术)来执行热部署。
定制Jetty插件:
jettyRun {
httpPort = 9090
contextPath = ‘todo’
}