今天在使用Maven+Jetty运行JavaWeb工程时,发现无法在运行状态下修改JS、HTML文件,即无法热修改,网上搜了一下,整合了很多文章最终搞定。
现象
![](http://www.th7.cn/d/file/p/2015/12/22/3f7ad8956f195017adf696a03052e4f4.jpg)
此时在Eclipse中修改index.html文件时
![](http://www.th7.cn/d/file/p/2015/12/22/c9468c2cf18f831ce8cc84ab77dfdd81.jpg)
不允许进行修改。
原因:如果NIO被支持的话,Jetty会使用内存映射文件来缓存静态文件,其中包括.js文件。在Windows下,使用内存映射文件会导致文件被锁定。解决方案是不使用内存映射文件来做缓存。(摘自参考文章)
1.在你使用的Jetty版本的jetty.jar中找到webdefault.xml,它在jar文件中的路径是org/eclipse/jetty/webapp/webdefault.xml。把它拷贝到项目中,比如src/main/resources/webdefault.xml。
![](http://www.th7.cn/d/file/p/2015/12/22/9fb6194a1496af8e690491201129591e.jpg)
如果不知道Jetty在哪直接运行一下项目就能看到所用的Jetty版本(jetty7之前是一个jetty包,7之后拆分为了多个,我们要使用的文件在jetty-webapp下)
2.找到useFileMappedBuffer参数,把值设成false
3.在pom.xml中,设置jetty使用更新过的webdefault.xml文件。
这样就在运行时也可以修改js和css了。
![](http://www.th7.cn/d/file/p/2015/12/22/3f7ad8956f195017adf696a03052e4f4.jpg)
![](http://www.th7.cn/d/file/p/2015/12/22/8e3a97158a08e6630edc01da34587f76.jpg)
![](http://www.th7.cn/d/file/p/2015/12/22/97e250d7683663d2a1346c7c9526dcd2.jpg)
亲测通过!