Gradle裏配置jetty實現靜態資源的熱部署

通过Gradle我们可以很方便的使用内置jetty启动我们的web程序,在本地进行调试。但是在使用的过程中,我发现了几个问题,导致本地调试的效率大受影响。

  1. 如果使用gradle jettyRun启动jetty服务器后,项目里的静态资源(jsp,html,JavaScript文件)都被锁定了,导致无法实时修改这些静态资源。

  2. 既然无法实时修改这些静态资源,那意味着我们做一个很小的改动都需要先停止jetty server,然后修改,再重新启动jetty server,这样来回浪费很多时间,尤其是涉及前台页面改动时,每调整一个参数都需要重启jetty。

由于我以前使用过Maven,在Maven里jetty是可以显示热部署的。也就是说如果有静态文件被改动,那么jetty可以实时load并展现。那么在Gradle里面实现这个应该也不是难事,花了一些时间搞定了。

  • 首先要解决文件被锁定的问题。

文件被锁定是由于在使用windows系统时,jetty默认在内存中映射了这些文件,而windows会锁定内存映射的文件。解决的辦法就是修改jetty的配置,让其在启动server时将useFileMappedBuffer标志位设置为false。

设置方法有两种,一种是修改webdefault.xml文件中的useFileMappdBuffer标志位。webdefault.xml文件是jetty启动服务的配置文件,其先于项目中的WEB-INF/web.xml文件被加载。 jetty包中默认有这个文件,可以将其提取出来,保存在项目根目录下,并修改useFileMappedBuffer节点。

1
2
<param-name>useFileMappedBuffer</param-name>
<param-value>false</param-value>

然后在build.gradle加入对此文件的引用。

1
2
3
[jettyRun, jettyRunWar,jettyStop]*.with {
  webDefaultXml = file("${rootDir}/webdefault.xml")
}

第二种方法是修改项目中的WEB-INF/web.xml文件,在其中加入这个节点。

1
2
3
4
5
6
7
8
9
<servlet>
    <!-- Override init parameter to avoid nasty -->
    <!-- file locking issue on windows.         -->
    <servlet-name>default</servlet-name>
        <init-param>
            <param-name>useFileMappedBuffer</param-name>
            <param-value>false</param-value>
        </init-param>
</servlet>
  • 解决jetty的hot deploy的问题。

这个就比较简单了,Gradle的jetty插件有两个属性,一个是reload属性,需要设置为automatic。另一个属性是 scanIntervalSeconds,这是指定jetty扫描文件改变的时间间隔,默认为0,单位是秒。 在build.gradle中加入设置。

1
2
3
4
jettyRun {
  reload ="automatic"
  scanIntervalSeconds = 1
}

齐活。接下来运行gradle jettyRun,待服务启动起来以后,如果修改了静态资源,只需要按Ctrl+R刷新页面即可重新加载资源。

更多相关文章
一周排行
  • 404页面的目的是:告诉浏览者其所请求的页面不存在或链接错误,同时引导用户使用网站其他页面而不是关闭窗口离开. 404对seo的影响 自定义404错误页面是增强用户体验的很好的做法,但在应用过程中往往并未注意到对搜索 ...
  • 


    		    愛立信MGW的IP地址應用
    一.愛立信MGW的IP地址分类 根据软交换协议和维护的需要,愛立信MGW的IP地址一共分为
  • VPN即虚拟专用网络的简称,其通过在internet网上建立一条隧道,通过隧道安全.可靠地传输数据,为企业内部网络的扩展及远程用户访问企业私有网络提供了可靠的途径,其低廉的成本为群多企业所青睐. VPN实现技术种类繁 ...
  • 兼容性一直是前端工程师心中永远的痛.手机浏览器,因为基本是webkit(blink)内核当道,很多公司,不用考虑IE系的浏览器,所以感觉兼容性上的问题可能会少一些. 但是手机端,虽然出了很多工具,但是调试依然比PC端
  • IS-IS近年来由于Cisco的力推,得到了比较大范围的应用.IS-IS和OSPF作为两种典型的链路状态路由协议,很多人希望知道他们的异同点和各自的优点,本文对这两种协议做了些总结,很多都是自己的观点,仅供参考.不当
  • 编写一个程序--从文本文件当中读取单词,并将所有不重复的单词按照升序显示,文本文件被作为命令行参数传递. import java.io.BufferedReader; import java.io.FileInput
  • Big Event in HDU Time Limit: 10/5 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submiss
  • git cherrypick  從其他分支檢出指定的commit到當前分支
    http://think-like-a-git.net/sections/rebase-f
  • 阿里云启动不了网站   1  将网站的目录属性-安全中加入IUSER_计算机名字的访问权限     和  加入NER SERVICE的访问权限   2 IIS打开网站属性--目录--执行权限改为顺脚本   3  用下
  • 用yum 安装依赖的包 yum install libjpeg libjpeg-devel libpng libpng-devel libtiff libtiff-devel libungif libungif-de