本机环境

JDK 7 Maven 3.2 Jetty 9.2 Eclipse Luna

pom.xml 配置

在你的 pom.xml 文件中添加 jetty 插件的描述信息(查看Jetty更多的版本信息):
[...]
<build>
  <plugins>
    <plugin>
      <groupId>org.eclipse.jetty</groupId>
      <artifactId>jetty-maven-plugin</artifactId>
      <version>9.2.8.v20150217</version>
    </plugin>
  </plugins>
</build>
[...]

启动 & 停止

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

jetty 9 部署的项目的 Context path 默认是 /,也就是说,项目的访问入口地址是:http://localhost:8080(不带项目名)
如果你希望通过命令 mvn jetty:stop 执行关闭 jetty 服务,你需要像下面一样在你的 pom.xml 配置文件中添加一个特殊的端口和控制键: 
<configuration>
  [...]
  <stopKey>shutdown</stopKey>
  <stopPort>9966</stopPort>
  [...]
</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>useFileMappedBuffer</param-name>
  <param-value>false</param-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>8081</port>
  </httpConnector>
  [...]
</configuration>

自动热部署

在你的 pom.xml 中添加如下配置: 

<configuration>
  [...]
  <scanIntervalSeconds>2</scanIntervalSeconds>
  [...]
</configuration>

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

手动重加载

在你的 pom.xml 文件中添加如下配置,reload 的可选值 :[automatic|manual]

<configuration>
  [...]
  <reload>manual</reload>
  [...]
</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.log</filename>
    <filenameDateFormat>yyyy_MM_dd</filenameDateFormat>
    <logDateFormat>yyyy-MM-dd HH:mm:ss</logDateFormat>
    <logTimeZone>GMT+8:00</logTimeZone>
    <append>true</append>
    <logServer>true</logServer>
    <retainDays>120</retainDays>
    <logCookies>true</logCookies>
  </requestLog>
  [...]
</configuration>
org.eclipse.jetty.server.NCSARequestLog 是 org.eclipse.jetty.server.RequestLog 的一个实现类。
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>true</dumpOnStart>
  [...]
</configuration>
dumpOnStart 默认值为 false,如果设为 true,jetty 在启动时会把当前服务进程的内存信息输出到控制台中,但这并不会保存到文件中。

WEB上下文

最常用的是 contextPath,它的配置如下: 

<configuration>
  [...]
  <webApp>
    <contextPath>/${project.artifactId}</contextPath>
  </webApp>
  [...]
</configuration>

contextPath 的默认值的 /,${project.artifactId} 引用了 <artifactId> 节点的值,即项目的名称。
项目的静态资源文件目录默认是 src/main/webapp,如果静态资源目录有多个,或者不在默认的 src/main/webapp 目录下,可做如下配置: 

<configuration>
  [...]
  <webApp>
    <contextPath>/${project.artifactId}</contextPath>
    <resourceBases>
      <resourceBase>${project.basedir}/src/main/webapp</resourceBase>
      <resourceBase>${project.basedir}/commons</resourceBase>
    </resourceBases>
  </webApp>
  [...]
</configuration>

引用静态资源文件时,路径不包含资源目录的名称,如 commons/main.css,引用方式为:<link href="main.css" rel="stylesheet" /> 
更多参数信息可参考 jetty-maven-plugin.html#configuring-your-webapp

完整的配置

附 pom.xml 文件中 jetty 插件的完整配置片段: 

<build>
  [...]
  <plugins>
    <plugin>
      <groupId>org.eclipse.jetty</groupId>
      <artifactId>jetty-maven-plugin</artifactId>
      <version>9.2.8.v20150217</version>
      <configuration>
        <httpConnector>
          <port>8081</port>
        </httpConnector>
        <stopKey>shutdown</stopKey>
        <stopPort>9966</stopPort>
        <!--
        <scanIntervalSeconds>2</scanIntervalSeconds>
        -->
        <reload>manual</reload>
        <dumpOnStart>true</dumpOnStart>
        <webApp>
          <contextPath>/${project.artifactId}</contextPath>
          <!--
          <resourceBases>
            <resourceBase>${project.basedir}/src/main/webapp</resourceBase>
            <resourceBase>${project.basedir}/commons</resourceBase>
          </resourceBases>
          -->
        </webApp>
        <requestLog implementation="org.eclipse.jetty.server.NCSARequestLog">
          <filename>target/access-yyyy_mm_dd.log</filename>
          <filenameDateFormat>yyyy_MM_dd</filenameDateFormat>
          <logDateFormat>yyyy-MM-dd HH:mm:ss</logDateFormat>
          <logTimeZone>GMT+8:00</logTimeZone>
          <append>true</append>
          <logServer>true</logServer>
          <retainDays>120</retainDays>
          <logCookies>true</logCookies>
        </requestLog>
      </configuration>
    </plugin>
  </plugins>
  [...]
</build>

更多有关 jetty 的配置信息可参考 http://www.eclipse.org/jetty/documentation/current/jetty-maven-plugin.html

简单版配置

<plugins>
 <!-- tomcat7 -->  <plugin>  <groupId>org.apache.tomcat.maven</groupId>    <artifactId>tomcat7-maven-plugin</artifactId>    <version>2.2</version>    <configuration>      <useBodyEncodingForURI>true</useBodyEncodingForURI>      <path>/</path>    </configuration>  </plugin>  <!-- jetty -->  <plugin>    <groupId>org.mortbay.jetty</groupId>    <artifactId>jetty-maven-plugin</artifactId>    <version>7.6.15.v20140411</version>    <configuration>      <useTestClasspath>true</useTestClasspath>      <webAppConfig>        <contextPath>/</contextPath>      </webAppConfig>    </configuration>  </plugin></plugins> 

jeety and tomcat plugins In Maven的更多相关文章

  1. Intellij IDEA创建的Web项目配置Tomcat并启动Maven项目

    本篇博客讲解IDEA如何配置Tomcat. 大部分是直接上图哦. 点击如图所示的地方,进行添加Tomcat配置页面 弹出页面后,按照如图顺序找到,点击+号 tomcat Service -> L ...

  2. 学习神器!本机安装虚拟机,并安装Linux系统,并部署整套web系统手册(包含自动部署应用脚本,JDK,tomcat,TortoiseSVN,Mysql,maven等软件)

    1.   引言 编写目的 本文档的编写目的主要是在Linux系统上部署mis_v3员工管理系统,方便测试,并为以后开发人员进行项目部署提供参考 准备工作 软件部分 软件项 版本 备注 Mysql 5. ...

  3. idea-----Intellij IDEA配置tomcat(非maven项目)

    Intellij IDEA配置tomcat(非maven项目) 引用: https://blog.csdn.net/springlovejava/article/details/78570241 ID ...

  4. Docker化tomcat 并且使用maven热部署

    今天没事干 就把自己的tomcat  docker化并且使用maven实现热部署 特别记录一下~ 1.首先进行centos7的安装 就不在记录了 注意的是最好使用centos7 因为docker 依赖 ...

  5. 基于tomcat插件的maven多模块工程热部署(附插件源码)

    内容属原创,转载请注明出处 写在前面的话 最近一直比较纠结,归根结底在于工程的模块化拆分.以前也干过这事,但是一直对以前的结果不满意,这会重操旧业,希望搞出个自己满意的结果. 之前有什么不满意的呢? ...

  6. maven拓展——使用tomcat插件运行maven项目

    首先,在pom.xml中配置插件: <build> <plugins> <plugin> <groupId>org.apache.tomcat.mave ...

  7. 在eclipse中maven构建Web项目,tomcat插件在maven中的运用

    1.选中maven,构建maven  web 2.项目构建好之后发现一个错误如图,是因为没有servlet的API,我们需要在pom.xml 中对servlet的API进行依赖 pom.xml如下即可 ...

  8. Java学习01-使用maven插件tomcat搭建web maven项目

    我使用社区版的IDEA,社区版的没有tomcat插件,只能使用maven插件进行tomcat的使用了,下面进入正题 一.pom.xml配置tomcat插件 <build> <fina ...

  9. [Web开发(1)] MyEclipse/Eclipse 使用Tomcat部署Web/Maven项目经典错误

    1.Tomcat启动报错:server tomcat start within 45 seconds 问题原因:由于eclipse默认Tomcat设置是启动时间为45s,所以在45s内没有启动成功就会 ...

随机推荐

  1. 由App的启动说起(转)

    The two most important days in your life are the day you are born and the day you find out why. -- M ...

  2. [转]Delphi I/O Errors

    The following are the Windows API (and former DOS) IO errors, which are also the IO errors often ret ...

  3. 64位 CentOS NDK 编译 FFMPEG

    64位 CentOS NDK 编译 FFMPEG 一.           参考文章: http://www.cnblogs.com/baopu/p/4733029.html http://www.c ...

  4. nim

    上帝创造了一个n*m棋盘,每一个格子都只有可能是黑色或者白色的. 亚当和夏娃在玩一个游戏,每次寻找边长为x的正方形,其中每个格子必须为黑色,然后将这些格子染白. 如果谁不能操作了,那么那个人就输了. ...

  5. Problem 1108 - 淼·诺贝尔

    #include<iostream> #include<vector> #include<algorithm> using namespace std; struc ...

  6. 再看IOC, 读深入理解DIP、IoC、DI以及IoC容器

    IoC则是一种 软件设计模式,它告诉你应该如何做,来解除相互依赖模块的耦合.控制反转(IoC),它为相互依赖的组件提供抽象,将依赖(低层模块)对象的获得交给第三方(系统)来控制,即依赖对象不在被依赖模 ...

  7. JSP中用include标签动态引入其它文件报错

    <jsp:include page="<%=path %>/include.jsp"></jsp:include> 报错:attribute f ...

  8. 将listBox中信息显示在dataGridview中,操作datagridview后删除listBox信息和SQL数据库信息 续(浅谈listBox..)

    应用场景      对datagridview控件使用了解,以及操作datagridview选中的信息删除,并且有二次确认后才删除用户信息.相应的删除listbox中用户信息,下面一起看看需要哪些准备 ...

  9. php 文件上传后缀名与文件类型对照表(几乎涵盖所有文件)

    网上有很多php文件上传的类,文件上传处理是php的一个特色(至少手册上是将此作为php特点来展示的,个人认为php在数组方面的优异功能更有特 色),学php的人都知道文件上传怎么做,但很多人在编程中 ...

  10. JQuery zoom插件学习

    jquery zoom是一款图片放大插件,经常用在商城商品页面里. 使用JQuery zoom插件,除了需要引入JQuery.js外,还要引入JQuery.zoom.js文件及jqzoom.css文件 ...