Gradle+Jetty实现静态资源的热部署

本文转自http://www.cnblogs.com/huang0925/p/3302487.html

---------------------------------------

通过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 <param-name>useFileMappedBuffer</param-name>
2 <param-value>false</param-value>

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

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

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

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

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

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

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

时间: 2024-10-27 07:36:06

Gradle+Jetty实现静态资源的热部署的相关文章

Jrebel实现Jetty 热部署

一直对热部署没有真正实践过.以前搞Websphere application server的时候,就经常有客户问WAS热部署的问题,当时其实不甚了了,记得是在部署应用时选上支持二进制部署即可.具体是不是真的work了,我现在都不确定. 自己做web开发,采用的是嵌入式的Jetty方式,但Jetty不支持class的热部署,不得不经常重启,这很浪费时间.花了小半天研究如何让Jetty支持class的热部署,也没找到好办法.搜索之,发现jrebel这个工具,历史竟然不短,可惜是收费的. 于是找了个破

jetty热部署,持久化session,jetty-maven插件配置

持久化session 背景 使用maven管理项目,使用jetty插件启动项目,虽然jetty是热部署的,但是没有配置的jetty并不算真正的热部署.因为在没有配置前每次热部署都会把session丢了.导致测试期间的数据丢失,重来一遍很麻烦. 本人使用的是jetty-maven-plugin,关于这个插件的一些基本配置就不说了,网上很多. 配置代码pom <plugin> <groupId>org.mortbay.jetty</groupId> <artifact

idea maven jetty插件热部署

maven tomcat插件好像无法进行热部署,jetty可以如下配置实现热部署,但是idea无法进行自动编译,所以需要如下快捷键 Ctrl+Shift+F9,编译 Ctrl+F9,生成项目 <plugin> <groupId>org.mortbay.jetty</groupId> <artifactId>jetty-maven-plugin</artifactId> <version>8.1.1.v20120215</vers

静态资源文件自动压缩并替换成压缩版本(大型网站优化技术)

原文:静态资源文件自动压缩并替换成压缩版本(大型网站优化技术) 这一次,我总结和分享一项大型网站优化技术,那就是在项目中自动压缩静态资源文件(css.js),并让网站自动加载压缩后的资源文件.当然,这项技术在雅虎35条前端优化建议里也有记载,但它那只是给出一个理论的方案而已,并且采用的是外部压缩工具去压缩,而在我的项目中,是直接通过自己的程序自动化去压缩所有css.js文件,然后让页面直接加载所压缩后的资源,接下来直接进入主题. 本次实验使用的是PHP脚本语言,版本是PHP5.6,是在LINUX

变态的静态资源缓存与更新

这是一个非常有趣的 非主流前端领域,这个领域要探索的是如何用工程手段解决前端开发和部署优化的综合问题,入行到现在一直在学习和实践中. 在我的印象中,facebook是这个领域的鼻祖,有兴趣.有梯子的同学可以去看看facebook的页面源代码,体会一下什么叫工程化. 接下来,我想从原理展开讲述,多图,较长,希望能有耐心看完. 让我们返璞归真,从原始的前端开发讲起.上图是一个"可爱"的index.html页面和它的样式文件a.css,用文本编辑器写代码,无需编译,本地预览,确认OK,丢到服

用jetty部署iMatrix平台源码时,静态资源应该放到哪里

大家在网站中下载源码之后,在eclipse中部署源码,用jetty插件做服务器. 静态资源(imatrix-static)给刚到tomcat里面的webapps里面.放的事war包,在官网中就可以下载.如下图配置静态资源在tomcat服务器中的位置. Ps 一定要下载站对应版本的war包.每个配置文件中关于静态资源的配置都有修改. 用jetty部署iMatrix平台源码时,静态资源应该放到哪里,布布扣,bubuko.com

SpringMVC 部署项目静态资源文件访问问题

问题:采用SpringMVC 部署项目后程序加载或用浏览器访问时出现类似的警告,2011-01-19 10:52:51,646 WARN [org.springframework.web.servlet.PageNotFound] -<No mapping found for HTTP request with URI [/sandDemo001/images/1.jpg] in DispatcherServlet with name 'spring'>,主要看尖括号内部分.问题原因:罪魁祸首

jetty;tomcat;热部署

[说明]今天上午进行了jetty的插件部署,下午进行了tomcat的插件部署,晚上有其它事情需要回校 一:今日完成 1)搞定插件直接部署到jetty 2)搞定插件直接部署到tomcat 3)了解了一下web服务器和servlet服务器的关系 二:明日计划 1)了解spring的resen风格 三:疑难问题 maven安装的插件安装到哪里去了 四:思考总结 对b/s架构的消息请求和显示流程产生了疑惑,特别是服务器的那块东西 ———————————————————————————————— 在mav

Hexo博客部署codingNet静态资源无法加载

用Hexo搭建的个人博客,部署到github的pages的话,好像百度搜索不到.所以在国内的codingNet的pages服务也一起部署一下,这样方便国内国外搜索引擎收录进来.具体部署教程我是参考这里但是今天部署到codingNet的pages服务的时候,发现静态资源都加载不到,后来网上搜索了半天,才发现原来你要打算用codingNet的pages服务部署你的博客的话,你创建项目的名字必须和用户名保持一致,不能自己随便自定义.我重新创建了一个和用户名一致的项目,部署到他的pages服务,访问正常