maven jetty plugin

前言: 在 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 运行时修改并保存资源文件。

时间: 2024-10-29 19:11:53

maven jetty plugin的相关文章

Maven Jetty Plugin运行时报错

今天leader修改了pom文件的配置,更新代码后突然发现项目无法启动,具体的报错内容是: [ERROR] No plugin found for prefix 'jetty' in the current project and in the plu gin groups [org.apache.maven.plugins, org.codehaus.mojo] available from the repo sitories [local (C:\Documents and Settings

菜鸟学Java(十九)——WEB项目测试好帮手,Maven+Jetty

做WEB开发,测试是一件很费时间的事情.所以我们就应该用更简单.更快捷的方式进行测试.今天就向大家介绍一个轻量级的容器--jetty.j今天说的etty是Maven的一个插件jetty-maven-plugin,与Maven配合起来使用非常的方便,它的配置也非常的简单,下面我们就看看它怎么用吧! 在pom.xml 文件的<project>标签下加入如下代码: <build> <plugins> <plugin> <groupId>org.mort

maven+jetty环境下如何使用beetl

正常情况下,webapp包含了静态模板资源,class文件,因此beetl得以正常运行,不过maven+jetty有点特殊,在开发模式下(jetty:run),class位于target/class,而模板静态资源位于src/main/webapp下,所以,在maven+jetty下,会报: 加载模板错(TEMPLATE_LOAD_ERROR) 解决的方法是将class输出目录放到src/main/webapp/WEB-INF/classes 下,让他们再一起就行了 如下配置(第2行是关键) <

用Eclipse+Maven+Jetty构建Java Web开发环境(综合几篇教程整合2014年版)

工作需要用到Jetty作为web容器,得知Eclipse+Maven+Jetty的组合很不错,因此到网上查找了很多教程,但是或多或少写的不详细或者有过时的内容在里面导致最后配置失败,为了以后同事配置方便,写下这篇配置教程,顺便来方便一下大家. 用到的参考资料如下: [用Maven构建Java Web开发环境(Jetty容器)](以此教程为主)http://sarin.iteye.com/blog/784275 以及 http://sarin.iteye.com/blog/784697 [在Ecl

question --&gt; maven assembly plugin 修改文件默认权限

使用maven assembly plugin插件添加执行脚本时,发现默认权限为644,还需要手动添加执行权限.这很麻烦,于是查看文档 官方文档 http://maven.apache.org/plugins/maven-assembly-plugin/assembly.html#class_fileSet fileMode String Similar to a UNIX permission, sets the file mode of the files included. THIS IS

解决jfinal+beetl在Maven+Jetty中运行路径报错

这是因为Maven+Jetty运行时把class文件放在target下,而beetl却默认找项目的根目录 首先,在jfinal中加载beetl引擎:me.setMainRenderFactory(new BeetlRenderFactory()); 两种解决问题方法: 1.在添加引擎后加入如下代码 GroupTemplate gt = BeetlRenderFactory.groupTemplate; WebAppResourceLoader loader = (WebAppResourceLo

maven assembly plugin使用

使用场景 在使用maven来管理项目时,项目除了web项目,还有可能为控制台程序,一般用于开发一些后台服务的程序.最近在工作中也遇到了这种场景,使用quartz开发一个任务调度程序.程序中依赖很多jar包,项目的启动时只需要初始化spring容器即可. 使用方法 使用一个简单的基于spring框架的demo来做程序示例,来介绍maven assembly插件的使用方法. 项目中的代码目录如下: 在以上代码目录中,assembly目录下为打包的描述文件,下面会详细介绍该文件,bin目录下为启动脚本

[转] 关于maven tomcat plugin 调试源码的解决方案

一. 解决关联第三方jar源码 在pom文件中加入: Xml代码   <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-eclipse-plugin</artifactId> <version>2.9</version> <configuration> <

解决Maven报Plugin execution not covered by lifecycle configuration

环境 eclipse 4.3.0 maven 3.0.4 m2e 1.4.0 出现场景 以前的老项目,在我的环境(我的环境较新)下,别人老环境不报错. 错误示例 一个错误示例,子项目引用了父项目,子项目parent标签处报错如下: Multiple annotations found at this line: - maven-enforcer-plugin (goal "enforce") is ignored by m2e. - Plugin execution not cover