随笔-126  评论-247  文章-5  trackbacks-0

本机环境

jdk 7 maven 3.2 jetty 9.2 eclipse luna

pom.xml 配置

在你的 pom.xml 文件中添加 jetty 插件的描述信息():
[...]
<build>
  <plugins>
    <plugin>
      <groupid>org.eclipse.jettygroupid>
      <artifactid>jetty-maven-pluginartifactid>
      <version>9.2.8.v20150217version>
    plugin>
  plugins>
build>
[...]

启动 & 停止

命令行方式启动 jetty mvn jetty:run,可以通过 ctrl c 停止 jetty 服务。
或者,在 eclipse 中选中项目 --> 右键 --> run as --> maven build...,在 goals 栏输入 jetty:run(与命令行方式相比,仅仅是
少了 mvn 前缀,为方便起见,以下均以命令行方式介绍。)

jetty 9 部署的项目的 context path 默认是 /,也就是说,项目的访问入口地址是:(不带项目名)
如果你希望通过命令 mvn jetty:stop 执行关闭 jetty 服务,你需要像下面一样在你的 pom.xml 配置文件中添加一个特殊的端口和控制键:
<configuration>
  [...]
  <stopkey>shutdownstopkey>
  <stopport>9966stopport>
  [...]
configuration>
你仍可以通过 mvn jetty:run 启动 jetty 服务,可以通过 mvn jetty:stop 来停止 jetty 服务。

取消文件映射缓存

jetty 默认开启了 usefilemappedbuffer,在 jetty 运行期间,页面所使用的静态文件(如 css 文件等)不允许修改。如果你尝试去修改它
们,保存的时候就会出现 save could not be completed.

解决办法,找到 %repo%/org/eclipse/jetty/jetty-webapp/9.2.8.v20150217/jetty-webapp-9.2.8.v20150217.jar(%repo% 表示你
本地的 maven 仓库的目录,另外,将 9.2.8.v20150217 换成你所使用的版本)。用压缩工具打开它, 找到 jetty-webapp-9.2.8.v2015021
7.jar/org/eclipse/jetty/webapp/webdefault.xml,将 webdefault.xml 文件解压缩一份出来,用文本编辑器打开它,搜索找到
usefilemappedbuffer 配置的行,将 true 改成 false 以禁掉缓存。
<init-param>
  <param-name>usefilemappedbufferparam-name>
  <param-value>falseparam-value>
init-param>
先确认 jetty 服务已经停止,将原文件 jetty-webapp-9.2.8.v20150217.jar/org/eclipse/jetty/webapp/webdefault.xml 删除,将刚
才那份修改好的 webdefault.xml 文件重新压缩进去即可。

端口配置

jetty 默认使用的端口是 8080,命令行的方式修改端口的命令是:mvn -djetty.port=8081 jetty:run 。pom.xml 配置方式如下:
<configuration>
  [...]
  <httpconnector>
    <port>8081port>
  httpconnector>
  [...]
configuration>

自动热部署

在你的 pom.xml 中添加如下配置:
<configuration>
  [...]
  <scanintervalseconds>2scanintervalseconds>
  [...]
configuration>
默认值是 0。大于 0 的数值表示开启,0 表示关闭,单位为秒。以配置数值为一个周期,自动的扫描文件检查其内容是否有变化,如果发现文件的
内容被改变,则自动重新部署运用。命令行的方式:mvn -djetty.scanintervalseconds=2 jetty:run 。

手动重加载

在你的 pom.xml 文件中添加如下配置,reload 的可选值 :[automatic|manual]
<configuration>
  [...]
  <reload>manualreload>
  [...]
configuration>
默认值为 automatic,它与大于 0 的 scanintervalseconds 节点一起作用,实现自动热部署的工作。设为 manual 的好处是,当你改变文件
内容并保存时,不会马上触发自动扫描和重部署的动作,你还可以继续的修改,直至你在 console 或命令行中敲回车键(enter)的时候才触发重
新加载的动作。这样可以更加的方便调试修改。命令行的方式是:mvn -djetty.reload=manual jetty:run

访问日志

在你的 pom.xml 文件添加如下配置:
<configuration>
  [...]
  <requestlog implementation="org.eclipse.jetty.server.ncsarequestlog">
    <filename>target/access-yyyy_mm_dd.logfilename>
    <filenamedateformat>yyyy_mm_ddfilenamedateformat>
    <logdateformat>yyyy-mm-dd hh:mm:sslogdateformat>
    <logtimezone>gmt 8:00logtimezone>
    <append>trueappend>
    <logserver>truelogserver>
    <retaindays>120retaindays>
    <logcookies>truelogcookies>
  requestlog>
  [...]
configuration>
是 的一个实现类。
org.eclipse.jetty.server.ncsarequestlog 是一种伪标准的 ncsa 日志格式。下面是一些节点参数的解释:
filename:日志文件的名称
filenamedateformat:日志文件的名称的日期格式,它要求日志文件名必须含有 yyyy_mm_dd 串
logdateformat:日志内容的时间格式
logtimezone:时区
append:追加到日志
logserver:记录访问的主机名
retaindays:日志文件保存的天数, 超过删除
logcookies:记录 cookies
启动 jetty 服务,在项目的 target 目录下会生成一个 access-2015_06_23.log 文件,该文件中的其中一条记录如下:
localhost 0:0:0:0:0:0:0:1 - - [2015-06-23 01:17:05] "get /css/main.css http/1.1" 304 - 
"http://localhost:8081/"  "mozilla/5.0 (windows nt 6.3; wow64) applewebkit/537.36 (khtml, like gecko) 
chrome/35.0.1916.153 safari/537.36 se 2.x metasr 1.0" "jsessionid=2gyikovul2iz168116l2afo4f"

转储快照

在你的 pom.xml 文件添加如下配置:
<configuration>
  [...]
  <dumponstart>truedumponstart>
  [...]
configuration>
dumponstart 默认值为 false,如果设为 true,jetty 在启动时会把当前服务进程的内存信息输出到控制台中,但这并不会保存到文件中。

web上下文

最常用的是 contextpath,它的配置如下:
<configuration>
  [...]
  <webapp>
    <contextpath>/${project.artifactid}contextpath>
  webapp>
  [...]
configuration>
contextpath 的默认值的 /,${project.artifactid} 引用了 节点的值,即项目的名称。
项目的静态资源文件目录默认是 src/main/webapp,如果静态资源目录有多个,或者不在默认的 src/main/webapp 目录下,可做如下配置:
<configuration>
  [...]
  <webapp>
    <contextpath>/${project.artifactid}contextpath>
    <resourcebases>
      <resourcebase>${project.basedir}/src/main/webappresourcebase>
      <resourcebase>${project.basedir}/commonsresourcebase>
    resourcebases>
  webapp>
  [...]
configuration>
引用静态资源文件时,路径不包含资源目录的名称,如 commons/main.css,引用方式为: 
更多参数信息可参考

完整的配置

附 pom.xml 文件中 jetty 插件的完整配置片段:
<build>
  [...]
  <plugins>
    <plugin>
      <groupid>org.eclipse.jettygroupid>
      <artifactid>jetty-maven-pluginartifactid>
      <version>9.2.8.v20150217version>
      <configuration>
        <httpconnector>
          <port>8081port>
        httpconnector>
        <stopkey>shutdownstopkey>
        <stopport>9966stopport>
        
        <reload>manualreload>
        <dumponstart>truedumponstart>
        <webapp>
          <contextpath>/${project.artifactid}contextpath>
          
        webapp>
        <requestlog implementation="org.eclipse.jetty.server.ncsarequestlog">
          <filename>target/access-yyyy_mm_dd.logfilename>
          <filenamedateformat>yyyy_mm_ddfilenamedateformat>
          <logdateformat>yyyy-mm-dd hh:mm:sslogdateformat>
          <logtimezone>gmt 8:00logtimezone>
          <append>trueappend>
          <logserver>truelogserver>
          <retaindays>120retaindays>
          <logcookies>truelogcookies>
        requestlog>
      configuration>
    plugin>
  plugins>
  [...]
build>
更多有关 jetty 的配置信息可参考


  
posted on 2015-06-23 15:05 fancydeepin 阅读(48782) 评论(5)  编辑  收藏 所属分类: maven

评论:
# re: maven jetty plugin 2013-07-30 10:48 |
写的不错哦  回复  
  
# re: maven jetty plugin 2014-08-15 17:34 |
1,博主加油!  回复  
  
# re: maven jetty 插件使用 2015-07-22 14:59 |
内容格式都很清晰,希望博主提供jetty更深入一点的介绍和应用(优点、为什么在maven中使用这个插件、和tomcat插件比怎么样、和cargo怎么联系)  回复  
  
# re: maven jetty 插件使用 2015-12-25 10:06 |
博文写的很详细,非常棒!!  回复  
  
# re: maven jetty 插件使用 2016-01-21 16:16 |
赞,楼主写得真棒  回复  
  
网站地图