用IntelliJ IDEA开发web项目使用Gradle/Maven的jetty插件跑的时候经常遇到项目启动后,无法编辑html、js等静态资源文件的情况。
后来又上网查了好多资料,才发现不是IDEA的问题,是jetty本身的问题:原因是如果NIO被支持的话,Jetty会使用内存映射文件来缓存静态文件,其中包括.js文件。在Windows下面,使用内存映射文件会导致文件被锁定。
解决方案是不使用内存映射文件来做缓存。
解决:
对于jetty6:
打开自己的maven本地仓库 .m2\repository\org\mortbay\jetty\jetty\6.1.25 修改 jetty-6.1.25.jar 中的org/mortbay/jetty/webapp/webdefault.xml 文件
<init-param>
<param-name>useFileMappedBuffer</param-name>
<param-value>true</param-value>
</init-param>
将param-value修改为false。如下:
<init-param>
<param-name>useFileMappedBuffer</param-name>
<param-value>false</param-value>
</init-param>
对于jetty6以上:
D:\Java\gradle.gradle\caches\modules-2\files-2.1\org.eclipse.jetty\jetty-webapp\9.2.22.v20170606\1b512e26860e651567a35abd12cfa3772bc61902\jetty-webapp-9.2.22.v20170606.jar
即在\org\eclipse\jetty\webapp目录下
推荐使用Everything进行搜索。
IDEA的 Jetty Runner插件对应的位置:
修改同上。