原因是如果NIO被支持的话,Jetty会使用内存映射文件来缓存静态文件,其中包括.js文件。在Windows下面,使用内存映射文件会导致文件被锁定。解决方案是不使用内存映射文件来做缓存。如果你使用Maven,那就很简单了。步骤如下:
找到jetty.jar后解压,从中找到webdefault.xml,它在jar文件中的路径是org/mortbay/jetty/webapp/webdefault.xml。把它拷贝到项目中,比如src/test/resources/webdefault.xml.
找到useFileMappedBuffer参数,把值设成false
<init-param> <param-name>useFileMappedBuffer</param-name> <param-value>true</param-value> <!-- change to false --> </init-param>
在pom.xml中,设置jetty使用更新过的webdefault.xml文件
<plugin> <groupId>org.mortbay.jetty</groupId> <artifactId>maven-jetty-plugin</artifactId> <version>6.1.10</version> <configuration> <contextPath>/</contextPath> <scanIntervalSeconds>3</scanIntervalSeconds> <scanTargetPatterns> <scanTargetPattern> <directory>src/main/webapp</directory> <includes> <include>**/*.xml</include> <include>**/*.properties</include> </includes> </scanTargetPattern> </scanTargetPatterns> <webDefaultXml>src/main/resources/webdefault.xml</webDefaultXml> <defaultsDescriptor>webdefault.xml</defaultsDescriptor> <connectors> <connector implementation="org.mortbay.jetty.nio.SelectChannelConnector"> <port>9093</port> <maxIdleTime>60000</maxIdleTime> </connector> </connectors> </configuration> </plugin>
好了,这样就解决问题了!