Gradle构建Java Web应用(转)

转自:http://www.blogjava.net/jiangshachina/archive/2014/02/03/409285.html

本文是发布在java.net上的一篇摘自于<Gradle in Action>一书中的节选,介绍了使用Gradle构建Java Web应用的过程。刚刚接触Gradle,看到了这篇小文,随手译了出来:-) (2014.01.23最后更新)

当今世界,一派繁忙。在职业生涯和私人生活中,我们中间的许多人要同时管理多个项目。你可能常常发现自己处于不知所措及失控的状态。保持规整并专注于价值的关键是一个维护良好的工作清单。当然,你可能总是把你的任务写在一张纸上,但是你也许不可能在你所处的任何地方都可方便地获得这些工作条目?对互联网的访问几乎是无处不在的,无论是通过你的移动电话,还是公共的网络接入点。在<Gradle in Action>一书中,如图1所示的说明性示例是一个很有吸引力的可视化Web应用。
 
图1 To Do应用可以通过互联网进行访问,并使用它去管理数据存储中的工作条目

Gradle插件表现的如同一个使能器,它会自动地执行这些任务。一个插件通过引入特定领域的规范以及对缺省值敏感的任务去对工程进行扩展。随Gradle发布的插件之一就是Java插件。该Java插件绝不仅仅是提供了源码编译和打包这样的基础功能。它为工程建立了一整套标准的目录布局,它会确保以正确的顺序去执行任务,这样,这些任务在Java工程环境中才是有意义的。现在是时候为我们的应用去创建一个构建脚本并去使用这个Java插件了。

构建Java应用
一开始,每个Gradle工程都会创建一个名为build.gradle的构建脚本。为了创建该脚本,并告诉该工程使用Java插件,应该像这样去做:

apply plugin: ‘java‘

为了构建你的Java代码,一行代码就够了。但Gradle怎么知道去哪儿找你的源文件呢?该Java插件引入的规范之一就是源代码的路径。默认地,该插件会到目录src/main/java中搜寻产品的源代码。

构建Web应用
通过War插件,Gradle也提供了构建Web应用的扩展支持。War插件扩展了Java插件,它加入了针对Web应用程序开发的规范,并支持归集WAR文件。让我们也在这个工程中用用War插件:

apply plugin: ‘war‘

Web应用源文件的默认路径是src/main/webapp。假设你已经明确了该应用所必要的Java类。那么要使产品的全部源代码和Web资源文件处于正确路径下,该工程的目录布局应该像下面这样:

.
├── build.gradle
└── src
    └── main
        ├── java
        │   └── com
        │       └── manning
        │           └── gia
        │               └── todo
        │                   ├── model
        │                   │   └── ToDoItem.java
        │                   ├── repository
        │                   │   ├── InMemoryToDoRepository.java
        │                   │   └── ToDoRepository.java
        │                   └── web
        │                       └── ToDoServlet.java
        └── webapp                                               #A
            ├── WEB-INF
            │   └── web.xml                                      #B
            ├── css                                              #C
            │   ├── base.css
            │   └── bg.png
            └── jsp                                              #D
                ├── index.jsp
                └── todo-list.jsp

#A Web源文件默认目录
#B Web应用描述符文件
#C 存储描述如何展现HTML元素的样式单文件的目录
#D 存放JSP形式的动态脚本化视图组件

声明外部依赖
在实现这个Web应用的过程,我们使用的一些类,例如javax.servlet.HttpServlet,并非Java标准版(Java SE)的一部分。在构建工程之前,我们需要确保已经声明了这些外部依赖。在Java系统中,依赖类库是以JAR文件的形式去发布和使用的。许多类库可以从仓库,如一个文件系统或中央服务器,中获得。为了使用依赖,Gradle要求你至少定义一个仓库。出于一些考虑,我们将使用公共的可通过互联网进行访问的Maven Central仓库。

repositories {
   mavenCentral()                   #A
}
#A 通过http://repo1.maven.org/maven2访问Maven2中央仓库的简短标记

在Gradle中,依赖是通过配置项来进行分组的。我们将来Servlet依赖使用的配置项是providedCompile。该配置项用于那些在编译时而非运行时所需的依赖。像JSTL这样的运行时依赖,在编译时不会被用到,但在运行时则会被用到。它们都会成为WAR文件的一部分。下面的配置语句块声明了我们应用所需的外部类库:

dependencies {
   providedCompile ‘javax.servlet:servlet-api:2.5‘
   runtime ‘javax.servlet:jstl:1.1.2‘
}

构建工程
我们已经准备好构建这个工程了。另到工程中的一个Java插件任务名为build。该任务将编译源代码,运行测试程序并归集WAR文件--所有的这些任务都将以正确的顺序被执行。执行命令gradle build之后,你可能会得到形如下面的输出:

$ gradle build
:compileJava                                      #A
:processResources UP-TO-DATE
:classes
:war                                              #B
:assemble
:compileTestJava UP-TO-DATE                       #C
:processTestResources UP-TO-DATE
:testClasses UP-TO-DATE
:test                                             #D
:check
:build

#A 编译产品的Java源代码
#B War插件提供的任务,用于归集WAR文件
#C 编译Java测试源代码
#D 运行单元测试

上述输出的每一行都代表执行了一个由Java或War插件提供的任务。你可能会注意到,有一些任务被标记为UP-TO-DATE。它的意思是指该任务被跳过去了。Gradle的增量构建支持策略会自动识别不需要执行的工作。特别是在大型商业项目中,该特性会极大地节省时间。
在该工程的根节目录中,你将会发现一个名为build的子目录,它包含有执行构建之后的全部输出,包括类文件,测试报告,归集的WAR文件,以及像manifest这样的在打包时需要的临时文件。如下就是执行构建工作之后的工程目录结构:

.
├── build
│   ├── classes
│   │   └── main                                          #A
│   │       └── com
│   │           └── manning
│   │               └── gia
│   │                   └── todo
│   │                       ├── model
│   │                       │   └── ToDoItem.class
│   │                       ├── repository
│   │                       │   ├── InMemoryToDoRepository.class
│   │                       │   └── ToDoRepository.class
│   │                       └── web
│   │                           ├── ToDoServlet$ToDoListStats.class
│   │                           └── ToDoServlet.class
│   ├── dependency-cache
│   ├── libs
│   │   └── todo-webapp.war                               #B
│   ├── reports
│   │   └── tests
│   │       ├── base-style.css
│   │       ├── css3-pie-1.0beta3.htc
│   │       ├── index.html
│   │       ├── report.js
│   │       └── style.css
│   ├── test-results
│   │   └── binary
│   │       └── test
│   │           └── results.bin
│   └── tmp
│       └── war
│           └── MANIFEST.MF                                #C
├── build.gradle
└── src

#A 包含Java类文件的默认目录
#B 归集的WAR文件
#C 用于WAR的临时manifest文件

你已经知道如何从一个基于标准目录结构的Web工程去构建WAR文件。现在是时候将它布署到一个Servlet容器中去了。在下一节中,我们将在本地开发机器中启动Jetty去运行这个Web应用。

运行应用
在本地机器中运行一个Web应用应该很容易,能够实践快速应用开发(RAD),并能够提供快速的启动时间。最棒地是,它不要求你部署一个Web容器运行时环境。Jetty一个流行的轻量级开源Web容器,它支持前面提到的所有特性。在这个Web应用中加入一个HTTP模块,它就变成了一个嵌入式实现。Gradle的Jetty插件扩展了War插件,它提供的任务可以将一个Web应用部署到嵌入式容器中,并能够启动该应用。在你的构建脚本中,可以像如下那样使用这个插件:

apply plugin: ‘jetty‘

这个将被我们用于启动Web应用的任务名为jettyRun。它甚至可以在无需创建WAR文件的情况下启动一个Jetty容器。执行上述命令后会得到如下形式的输出:

$ gradle jettyRun
:compileJava
:processResources UP-TO-DATE
:classes
> Building > :jettyRun > Running at http://localhost:8080/todo-webapp-jetty

在上述输出的最后一行中,该插件告诉了你Jetty即将侦听的请求地址。打开一个你喜欢的浏览器,并输入上述地址。最后,我们会看到这个To Do Web应用的行为。图2展示在一个浏览器中查看到该应用界面的截屏。
 
图2 To Do应用的Web界面及其行为

在你通过组合键CTRL+C去停止这个应用之前,Gradle会让它一直运行。Jetty如何知道使用哪个端口和上下文环境去运行这个Web应用?再说一遍,这就是规范。Jetty运行Web应用所使用的默认端口就是8080。

总结
只需要较少的努力,你就可以使用Gradle去构建并运行一个Java Web应用。只要你严格遵循标准目录结构,那么你的构建脚本仅需要两行代码。

时间: 2024-10-18 18:57:35

Gradle构建Java Web应用(转)的相关文章

Gradle构建Java Web应用:Servlet依赖与Tomcat插件(转)

Gradle的官方tutorial介绍了构建Java Web应用的基本方法.不过在使用Servlet做上传的时候会碰到问题.这里分享下如何通过Servlet上传文件,以及如何使用Gradle来构建相应的Java Web工程. 参考原文:How to Build Web Scanning Application with Gradle Servlet文件上传 使用Servlet文件上传,可以参考Oracle的官方文档The fileupload Example Application.这里需要注意

Gradle构建Java Web应用:Servlet依赖与Tomcat插件

Gradle的官方tutorial介绍了构建Java Web应用的基本方法.不过在使用Servlet做上传的时候会碰到问题.这里分享下如何通过Servlet上传文件,以及如何使用Gradle来构建相应的Java Web工程. 参考原文:How to Build Web Scanning Application with Gradle Servlet文件上传 使用Servlet文件上传,可以参考Oracle的官方文档The fileupload Example Application.这里需要注意

idea14中用gradle构建java web项目并部署到tomcat中

新手用idea,idea确实秒杀eclipse,不过有很多配置不熟悉,可把我折腾坏了.几点笔记,都是学习过程中比较肯跌的错误. idea新建一个web项目,并用gradle构建: 首先新建一个gradle项目,此时是没有webapp/WEB-INF/目录结构的,然后F4打开module setting,选择左边的facets,选择中间的绿色 +号,选择web,就会自动生成web module deployment descriptor 的web.xml文件,并且生成一个web/WEB-INF/w

Eclipse中使用Gradle构建Java Web项目

Gradle是一种自动化建构工具,使用DSL来声明项目设置.通过Gradle,可以对项目的依赖进行配置,并且自动下载所依赖的文件,使得构建项目的效率大大提高. 1. 安装Gradle 下载Gradle的最新版本,并解压,设置环境变量GRADLE_HOME,并且将%GRADLE_HOME%\bin添加到Path里面: 2. 安装Gradle插件 在Eclipse的Help->Eclipse Marketplace中搜索Gradle,安装Buildship: 3. 创建Gradle项目 选择File

maven构建java web项目(eclipse原理同)

maven构建java web项目 1.  mvn archetype:generate -DarchetypeArtifactId=maven-archetype-webapp 如果是用eclipse,则可以新建webapp的maven工程.以下同. 2. 再pom.xml中加入 <build> <finalName>gswm-web</finalName> <plugins> <plugin> <groupId>org.apach

使用 Gradle 构建 Java 项目

使用 Gradle 构建 Java 项目 这个手册将通过一个简单的 Java 项目向大家介绍如何使用 Gradle 构建 Java 项目. 我们将要做什么? 我们将在这篇文档航中创建一个简单的 Java 项目,然后使用 Gradle 构建它. 需要准备什么? 预留15分钟空闲时间 一件称手的兵器(你最喜欢的 IDE 或者文本编辑器) Java环境([JDK6](http://www.oracle.com/technetwork/java/javase/downloads/index.html”J

用Eclipse+Maven+Jetty构建Java Web开发环境(综合几篇教程整合2014年版)

工作需要用到Jetty作为web容器,得知Eclipse+Maven+Jetty的组合很不错,因此到网上查找了很多教程,但是或多或少写的不详细或者有过时的内容在里面导致最后配置失败,为了以后同事配置方便,写下这篇配置教程,顺便来方便一下大家. 用到的参考资料如下: [用Maven构建Java Web开发环境(Jetty容器)](以此教程为主)http://sarin.iteye.com/blog/784275 以及 http://sarin.iteye.com/blog/784697 [在Ecl

详解CentOS7.4搭建Tomcat构建Java Web站点(内附源码包)

Java简介 Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承.指针等概念,因此Java语言具有功能强大和简单易用两个特征.Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论.Java具有简单性.面向对象.分布式.健壮性.安全性.平台独立与可移植性.多线程.动态性等特点.Java可以编写桌面应用程序.Web应用程序.分布式系统和嵌入式系统应用程序等. Tomcat简介 Tomcat是Apache软件基金会的Jakarta项目中的一

教小白使用Gradle构建Java项目

本指南将引导您逐步使用Gradle构建一个简单的Java项目. 你会建立什么 您将创建一个简单的应用程序,然后使用Gradle进行构建. 你需要什么 1. 约15分钟 2. 最喜欢的文本编辑器或IDE 3. JDK 6或更高版本 如何完成本指南 像大多数Spring 入门指南一样,您可以从头开始并完成每个步骤,也可以绕过您已经熟悉的基本设置步骤.无论哪种方式,您最终都可以使用工作代码. 要从头开始,请继续以设置项目. 要跳过基础知识,请执行以下操作: [下载](https://github.co