前言: 在 maven 下测试调试时,相比较 Tomcat 、Jboss 、Jetty 而言,个人更倾向于使用 Jetty Plugin。
怎么说呢?使用 Jetty Plugin 的时候最爽的是不用你敲打包、部署,然后再启动服务器的指令,只需敲一句:mvn jetty:run
或直接点 eclipse 上的 run 按钮就完事了。而且更爽的是,你修改资源文件,Jetty 能自动扫描到并及时给予反馈进行重加载,
这对修改java文件很有帮助,不用每次修改java文件都要重启服务器,省掉了不少没必要浪费的时间。
当然,如果想要 Jetty 跑得更理想,还需要禁止 Jetty 使用映射缓存。
环境:
Maven 3.0.4
Eclipse 3.6
maven-jetty-plugin 6.1.10
项目结构:
pom.xml
<
project
xmlns
="http://maven.apache.org/POM/4.0.0"
xmlns:xsi
="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation
="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"
>
<
modelVersion
>4.0.0
</
modelVersion
>
<
groupId
>com.fancy
</
groupId
>
<
artifactId
>jetty-plugin-demo
</
artifactId
>
<
packaging
>war
</
packaging
>
<
version
>1.0
</
version
>
<
name
>jetty-plugin-demo Maven Webapp
</
name
>
<
url
>http://maven.apache.org
</
url
>
<
build
>
<
finalName
>jetty-plugin-demo
</
finalName
>
<
plugins
>
<!--
Maven Jetty Plugin
-->
<
plugin
>
<
groupId
>org.mortbay.jetty
</
groupId
>
<
artifactId
>maven-jetty-plugin
</
artifactId
>
<
version
>6.1.10
</
version
>
<
configuration
>
<!--
每2秒的间隔扫描一次,实现热部署
-->
<
scanIntervalSeconds
>2
</
scanIntervalSeconds
>
</
configuration
>
</
plugin
>
</
plugins
>
</
build
>
</
project
>
index.jsp
<
html
>
<
body
>
<
h1
>Maven Jetty Plugin
</
h1
>
<
h2
>Hello World!
</
h2
>
</
body
>
</
html
>
选中项目,右键选择 Run As --> Maven build
Name:根据需要,自己取个名
Goals:输入要执行的 maven 命令
其余的不用管,直接点击 Run
Jetty 运行完成之后,访问:http://localhost:8080/jetty-plugin-demo/
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
禁止 Jetty 使用映射缓存:
当你想试图去修改正在被访问的资源文件,像 CSS、JS、FTL等,这时候你修改完成想保存的时候,是保存不了的。
你必须停掉 Jetty 容器(如果是在CMD下运行的 Jetty 容器,按 Ctrl + C 停掉 Jetty),才能保存。保存完成后必须
重新启动 Jetty 容器才能看见效果。这样做无论是对修改 .css、.js、.ftl 等都非常麻烦和不爽。
究其原因,这是 Jetty 使用了内存映射文件来缓存静态文件。在Windows下面,使用内存映射文件会导致文件被锁定。
解决方案是不使用内存映射文件来做缓存。步骤如下:
根据所使用 Jetty 版本在本地的 maven 仓库中找到 Jetty 版本对应的jar包。
如:
<plugins>
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>maven-jetty-plugin</artifactId>
<version>6.1.10</version>
</plugin>
</plugins>
则需找到( 我的本地的 maven 仓库是在 D:\Repositories\Maven ):
D:\Repositories\Maven\org\mortbay\jetty\jetty\6.1.10\jetty-6.1.10.jar
用解压缩工具打开此jar包,进到:
jetty-6.1.10.jar\org\mortbay\jetty\webapp
找到webdefault.xml文件,即: jetty-6.1.10.jar\org\mortbay\jetty\webapp\webdefault.xml
解压出此文件webdefault.xml,找到:
<param-name>useFileMappedBuffer</param-name>
<param-value>true</param-value>
将 true 改成 false,以禁止使用映射缓存。
删除原jar包中的webdefault.xml文件,将修改过的webdefault.xml文件压缩进去,OK。搞定。
这样之后就能在 Jetty 运行时修改并保存资源文件。