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刷新页面即可重新加载资源。

更多相关文章
一周排行
  • 缘由 导了几天的ipa,每次publish后都要改zip包名的代码,终于鼓起勇气翻看了一下egret publish的代码,唉,这代码...应该不会是北京的那几个大牛写的吧??? 正题 看了源码才知道为什么andro ...
  • 转自:http://www.cnblogs.com/dudu/archive/2009/11/10/1662.html 今天下午17点左右,博客园博客站点出现这样的错误信息: Error Summary: HTTP
  • 


    		    asp.net夜話之十一:web.config詳解
    在开发中经常会遇到这样的情况,在部署程序时为了保密起见并不将源代码随项目一同发布,而我们开 ...
  • 基于STEP7 V5.xWinCC V7.x快速開發專案
    西门子提供将STEP7和WinCC/WinCC flexible集成到一起的功能,这样做的
  • HTTP 錯誤 404.17
    解决方案 原因:“处理程序映射”中缺少ASP.NET 4.0的映射,需要添加映射. 操作方
  • 最近由于工作的需要在寻求一种比较好看.统计图表类别功能比较强大一些的图表显示方式,之前一直用aspchart,但是这种显示方式不管是从图表显示样式还是显示功能方面都非常单一有限.经过一段时间在网上查询资料,找了几个.
  • 全球PC市场份额第一的惠普发展转型,欲分离平板电脑及PC业务.而惠普的转型也给原本波澜不平的平板电脑市场带来了更多变数. 意料之外的TouchPad 虽然人们都看到了惠普的转型,但你所不知道的是,虽然惠普欲分离PC业 ...
  • 07ObjectiveC特有語法:點語法
    1.利用点语法替换set方法和get方法 2.点语法的本质 与Java中的点语法要区分开来
  • rdlc localReport.Render 
  • 最近稍微了解一下JNI和NDK. 网上各种教程给人一种二者不分的感觉, 经过自己运行代码, 将两者的关系理了一下.     就目前了解,JNI应该是java自带的一种调用c和c++等语言(native code)的一 ...