Maven + Eclipse + Jetty 修改javascript文件怎样不需重启Jetty

使用Maven + Eclipse + Jetty 进行开发,但有一个问题:那就是如果已经运行着Jetty,在这种情况下修改.js文件,在eclipse里保存都会失败,eclipse给出的错误信息是文件被锁定。这样迫使每次都得重启Jetty,对Javascript的开发非常不方便。

原因是如果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>


好了,这样就解决问题了!

猜你喜欢

转载自yzhw.iteye.com/blog/2098744