Gradle入门:创建Web应用程序项目

这篇博客文章描述了如何使用Gradle创建一个Web应用程序项目。

更具体地说,我们想创建一个使用Java的Web应用程序项目,将我们的Web应用程序打包到WAR文件中,并在开发环境中运行我们的Web应用程序。

让我们找出如何满足这些要求。

补充阅读:

如果您不熟悉Gradle, 请先阅读以下博客文章,然后再继续阅读此博客文章:

  • Gradle入门:简介可帮助您安装Gradle,描述Gradle构建的基本概念,并描述如何使用Gradle插件向构建中添加功能。
  • Gradle入门:我们的第一个Java项目描述了如何使用Gradle创建Java项目并将应用程序打包到可执行jar文件中。
  • Gradle入门:依赖性管理介绍了如何管理Gradle项目的依赖性。

创建一个Web应用程序项目

如果我们要创建一个使用Java和Gradle的Web应用程序项目,那么我们要做的第一件事就是创建一个Java项目。 让我们看看我们如何做到这一点。

创建一个Java项目

我们可以通过应用Java插件来创建Java项目。 我们可以通过在build.gradle文件中添加以下行来实现:

apply plugin: 'java'

Java插件向我们的版本添加了新的约定(例如,默认目录布局),任务和属性。 如果您想了解更多有关此的内容,则应阅读以下博客文章:

  • Gradle入门:我们的第一个Java项目

让我们继续前进,了解如何打包我们的Web应用程序。

打包我们的Web应用程序

在使用War插件打包Web应用程序之前 ,我们必须将其添加到我们的构建中。 应用War插件后, build.gradle文件如下所示:

apply plugin: 'java'
apply plugin: 'war'

War插件将一个新目录添加到项目的目录布局中,添加两个新的依赖项管理配置,并向我们的项目添加一个新任务。 这些更改描述如下:

  • War插件将src / main / webapp目录添加到项目的目录布局中。 此目录包含Web应用程序的源(CSS文件,Javascript文件,JSP文件等)。
  • War插件添加了两个新的依赖项管理配置,称为providerCompileproviderRuntime 。 这两个配置与编译运行时配置具有相同的作用域,但是不同之处在于,属于这些新配置的依赖项未添加到WAR存档中。
  • War插件还将战争任务添加到我们的Web应用程序项目中。 此任务将WAR归档文件汇编到build / libs目录。

补充阅读:

如果您不知道什么是编译运行时配置,则应阅读以下博客文章:

  • Gradle入门:依赖管理

现在,我们可以通过在命令提示符处运行命令gradle war来打包Web应用程序。 当我们这样做时,我们应该看到以下输出:

> gradle war
:compileJava
:processResources
:classes
:warBUILD SUCCESSFULTotal time: 4.937 secs

如果一切按预期进行,我们应该从build / libs目录中找到web-application.war文件。

注意:

如果您需要有关War插件或
war任务,或者您想覆盖War插件或war任务的默认配置,则应仔细查看以下网页:

  • Gradle用户指南:第26章。War插件
  • Gradle DSL参考:战争任务

让我们找出如何在开发环境中运行Web应用程序。

运行我们的Web应用程序

我们可以使用Gretty在开发环境中运行Web应用程序。 它同时支持Jetty和Tomcat,并且不会受到Gradle泄漏SLF4J绑定引起的问题的困扰 。 让我们继续并配置我们的构建,以使用Gretty运行我们的Web应用程序。

首先 ,我们必须配置构建脚本的依赖关系。 我们可以按照以下步骤进行操作:

  1. 配置构建脚本以在解析依赖项时使用Bintray的JCenter Maven存储库 。
  2. 将Gretty插件依赖项添加到构建脚本的类路径中。

build.gradle文件的源代码如下所示:

buildscript {repositories {jcenter()}dependencies {classpath 'org.akhikhl.gretty:gretty:+'}
}apply plugin: 'java'
apply plugin: 'war'

如果您想了解有关使用已发布为jar文件的二进制插件的更多信息,则应阅读《 Gradle用户指南》的以下部分:

  • Gradle用户指南:21.4通过buildscript块应用插件
  • Gradle用户指南:60.5构建脚本的外部依赖关系

其次 ,我们必须应用Gretty插件。 完成此操作后, build.gradle文件如下所示:

buildscript {repositories {jcenter()}dependencies {classpath 'org.akhikhl.gretty:gretty:+'}
}apply plugin: 'java'
apply plugin: 'war'
apply plugin: 'org.akhikhl.gretty'

第三 ,我们需要按照以下步骤配置Gretty:

  1. 将Gretty配置为在运行我们的Web应用程序时将Jetty 9用作servlet容器。
  2. 配置Jetty以侦听端口8080。
  3. 使用上下文路径“ /”将Jetty配置为运行我们的Web应用程序。

build.gradle文件的源代码如下所示:

buildscript {repositories {jcenter()}dependencies {classpath 'org.akhikhl.gretty:gretty:+'}
}apply plugin: 'java'
apply plugin: 'war'
apply plugin: 'org.akhikhl.gretty'gretty {port = 8080contextPath = '/'servletContainer = 'jetty9'
}

如果您想了解有关Gretty的更多信息,则应仔细阅读其文档:

  • Gretty文档:入门
  • Gretty文档:Gretty配置
  • 灰色文档

现在,我们可以在命令提示符处运行以下命令来启动和停止Web应用程序:

  • 命令gradle appStart将运行我们的Web应用程序。
  • gradle appStop命令将停止我们的Web应用程序。

让我们继续并总结从这篇博客文章中学到的知识。

摘要

这篇博客文章教会了我们四件事:

  • 我们了解到,如果使用默认配置,则必须将Web应用程序的源放置到src / main / webapp目录中。
  • 我们了解到War插件向我们的构建中添加了两个新的依赖项配置( ProvideCompileProvidedRuntime ),并且我们了解了这些依赖项配置如何工作。
  • 我们学习了将Web应用程序打包到WAR文件中。
  • 我们学会了在开发环境中运行Web应用程序。

PS:您可以从Github获得此博客文章的示例应用程序。

如果您想学习如何使用Gradle,请阅读我的Gradle教程 。

翻译自: https://www.javacodegeeks.com/2015/03/getting-started-with-gradle-creating-a-web-application-project.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/360615.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

js编码java解码_Js编码和Java后台解码

注:在使用get提交,url传递参数的时候,会带来中文乱码的问题,对此可以使用js编码来解决。Js编码的几种方式区别:1.window.escape()与HttpUtility.UrlEncodeUnicode()编码格式一样:将一个汉字编码为%uxxxx格式…

使用JAX-RS和Jetty创建Web服务和Rest Server

用Java创建WebService非常容易。 将其添加到ServletContainer并将其部署到嵌入式WebServer仅需要几行代码。 让我们创建一个具有两个函数的简单计算器,作为WebService的示例。 计算器将计算任何数量的squareRoot和平方。 它将返回一个简单的JSON响应,其…

java填充二维数组_Java用Arrays.fill()初始化二维数组的实现

在最短路径问题上遇到了一个问题,对于二维int数组 map[][],需要初始化为int的最大值,不想用双重循环赋初值,想用Arrays.fill()填充但是失败了。。。。。。首先说明,Arrays.fill()并不能提高赋值的效率,在函数的内部也是…

maya 中使用节点连接来求余数:

绑个东西要用到求余,不喜欢用表达式,就想用节点连出来,找了下网上只有 镀金铆钉 在火星时代上的教程,不过不能下载了,就自己想了下,终于搞出来了,做下笔记,不要忘了。 求余的思路&a…

Java8多线程ForkJoinPool:处理异常

引入Java8 lambda背后的主要动机之一是能够尽可能轻松地使用多核的能力(请参阅精通Lambdas:多核世界中的Java编程 )。 只需将代码从collection.stream()...更改为collection.parallelStream()...您就可以使用即时多线程,从而为您的…

java web 登录界面案例_【JavaWeb】74:写一个登录案例

今天是刘小爱自学Java的第74天。感谢你的观看,谢谢你。话不多说,开始今天的学习:Java又常被称之为后台开发。什么叫后台呢?除了后台还有什么前台、前端后端……这些概念一大堆,还容易弄混。以一个三层架构的知识点来引…

7种JIRA集成可优化Java开发流程

有哪些最佳集成可以用来优化JIRA工作流程? 我喜欢寻找在工作流程中提高效率的方法。 看着那些小的自动化和流畅的流程,使我的脸上露出笑容。 我知道我并不孤单,偶尔花更多的时间来获得一点点提升以使其正常工作,而不是最终节省了我…

hive处理日志,自定义inputformat

开放环境,hadoop-0.20.2,hive-0.6 1.日志分隔符 Xml代码 2010-05-31 10:50:17|||61.132.4.82|||http://www.360buy.com/product/201185.html 2010-05-31 10:50:17|||61.132.4.82|||http://www.360buy.com/product/201185.html分隔符是“ ||| ”&#xf…

java 封箱_java封箱和拆箱分析

学习java肯定会涉及到“封箱”和“拆箱”,那么什么是“封箱”和“拆箱呢?我相信有不少的老师或者作者都对此做过总结,在这里就不详细说了。总的来说就是:装箱就是自动将基本数据类型转换为包装器类型;拆箱就是自动将包…

EE JSP:使用自定义标签库生成动态内容

在Web应用程序中开发View层时,您希望尽量不要重复JSP文件中的内容。 JSP spec API允许您通过使用标记库来减少这种重复。 定制JSP标记是用户定义的xml标记元素,您可以将其插入JSP文件以替换为某些动态内容。 这是一个使用自定义JSP标记的简单jsp示例 &a…

prefuse学习(一)用非数据库连接和xml的方式读入数据

prefuse正常的数据源需要从ConnectionFactory中生产出来,但是如果平时不想用里面给的方法得到数据,就需要手动创造Graph里面所需要的内容两个Table 下面是我自己写的从文件中读入数据的工具类 package wjl.util;import java.io.FileInputStream; import …

java list作为参数传递_Java 程序将lambda表达式作为方法参数传递

Java 程序将lambda表达式作为方法参数传递在此示例中,我们将学习将lambda表达式作为Java中的方法参数传递。要理解此示例,您应该了解以下Java编程主题:示例1:将lambda表达式定义为方法参数示例import java.util.ArrayList;class M…

将ActiveMQ持久消息传递性能提高25倍

Apache ActiveMQ,JBoss A-MQ和Red Hat Apache ActiveMQ是一个非常受欢迎的开源消息传递代理,由创建(和工作) Apache Karaf , Apache Camel , Apache ServiceMix以及许多其他工具的人提供给您。 它拥有一个充…

sql数据库恢复

先附加,然后再备份,然后按如下: --数据还原到指定时间点的处理示例--创建测试数据库CREATE DATABASE DbGO --对数据库进行备份BACKUP DATABASE Db TO DISKc:\db.bak WITH FORMATGO --创建测试表CREATE TABLE Db.dbo.TB_test(ID int) --延时1秒钟,再进行后面的操作(这是由于SQL …

ECMA学习小结(3)——constructor 和 prototype

每个函数都有一个prototype的属性,当我们以这个函数为构造函数创建实例时(即用new的形式),创建出来的这个对象是没有prototype的属性的。以下代码为例:在console里进行调试cf 拥有一个prototype的属性,这个…

java什么是网络接口_java 网络编程 -- IP地址的表示与网络接口信息的获取(InetAddress和NetworkInterface)...

使用java进行网络程序的开发,可以说是一件令人愉悦的事情,对于用惯了C网络接口编程的人来说,当他们首次使用Java开发网络应用程序,会发现java开发网络应用是如此的简单,甚至仅用几分钟时间,您就可以学会这种…

如何使用悲观锁定修复乐观锁定竞争条件

概括 在我以前的文章中 ,我解释了使用显式乐观锁定的好处。 然后我们发现,在很短的时间范围内,并发交易仍可以在我们当前交易被提交之前立即提交产品价格更改。 此问题可以描述如下: 爱丽丝拿产品 然后,她决定订购…

分支限界

分支界定是一种在问题的解空间树上搜索问题的解的方法,其实就是剪枝广搜,它始终维护一个上下界用来剪枝,一个限界函数计算对解的最有期望。主要用于解决离散问题的优化。 分支界定的关键问题: (1)如何确定合…

mysql表变量临时表_表变量和临时表详解

首先让我们来看看什么是表变量和临时表。sql server 表变量1.初识表变量表变量在sql server 2000中首次被引用。表变量的定义和创建一个表大致相同,只不过是使用DECLARE variable而不是CREATE Table,表变量定义包括列定义,列名,数…

SWT外观:自定义FlatScrollBar颜色等

最近,我引入了一个自定义滑块控件 ,该控件可用于改善SWT外观和更细微的视图布局的感觉。 令人高兴的是,该小部件似乎已经在Code Affine世界之外找到了较早的采用者 。 这导致了一些增强 ,这些增强将在以下各节中介绍。 SWT滚动条…