maven集成jetty插件发布web项目

本地环境

jdk1.7, eclipse4.5, jetty8.1.6, maven3.2

pom.xml文件配置

在pom.xml文件中添加jetty插件

<build>
 <plugins>
  <plugin>
    <groupId>org.mortbay.jetty</groupId>
    <artifactId>jetty-maven-plugin</artifactId>
    <version>8.1.16.v20140903</version>
    </plugin>
 </plugins>
</build>
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

备注: 
Jetty7/8 的Maven插件配置:http://wiki.eclipse.org/Jetty/Feature/Jetty_Maven_Plugin 
Jetty9 最新的Maven插件配置:http://www.eclipse.org/jetty/documentation/current/jetty-maven-plugin.html 或者 最新RELEASE版配置 
Jetty 各个版本的限制: 
http://wiki.eclipse.org/Jetty/Starting/Jetty_Version_Comparison_Table 
Jetty 7 必须 Jdk 1.5+,Servlet 2.5,类似于 Tomcat 6,最新 Release 版本:

<plugin>
  <groupId>org.mortbay.jetty</groupId>
  <artifactId>jetty-maven-plugin</artifactId>
  <version>7.6.17.v20150415</version>
</plugin>
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5

Jetty 8 必须 Jdk 1.6+,Servlet 3.0,类似于 Tomcat 7,最新 Release 版本:

<plugin>
  <groupId>org.mortbay.jetty</groupId>
  <artifactId>jetty-maven-plugin</artifactId>
  <version>8.1.16.v20140903</version>
</plugin>
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5

Jetty 9 必须 Jdk 1.7+,Servlet 3.0+,类似于 Tomcat 8,最新 Release 版本:

<plugin>
  <groupId>org.eclipse.jetty</groupId>
  <artifactId>jetty-maven-plugin</artifactId>
  <version>9.2.10.v20150310</version>
</plugin>
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5

国内很多应用也许会去升级JDK版本,但往往还在使用Servlet2.5做开发,所以本文使用 Jetty 8 作为案例。

启动和停止

命令行方式启动jetty mvn jetty:run ,可以通过 ctrl+c 停止jetty服务。或者在eclipse中选中项目右击Run As–Maven build…在Goals中输入 jetty:run即可。 
eclipse中运行jetty服务

jetty8部署的项目Context path默认为/ 也就是说项目的访问入口是http://localhost:8080/(不带项目名)就可以直接访问。如果你希望通过命令mvn jetty:stop 执行关闭jetty服务,那么你需要在pom.xml中配置如下信息:

<bulid>
  <plugins>
    <plugin>
       <configuration>  
         <stopKey>shutdown</stopKey>  
         <stopPort>8099</stopPort>  
       </configuration>  
    <plugin>
  <plugins>
<bulid>
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

你仍可以通过 mvn jetty:run启动 jetty 服务,可以通过 mvn jetty:stop 来停止 jetty 服务。

取消映射文件

jetty 默认开启了 useFileMappedBuffer,在 jetty 运行期间,页面所使用的静态文件(如 css,html,jsp 等文件)不允许修改。如果你尝试去修改它 
们,保存的时候就会出现 Save could not be completed. 如下截图: 
这里写图片描述 
解决办法,找到 %repo%/org/eclipse/jetty/jetty-webapp/9.2.8.v20150217/jetty-webapp9.2.8.v20150217.jar 
(%repo% 表示你本地的 maven 仓库的目录,另外将 9.2.8.v20150217换成你所使用的版本)。用压缩工具打开它, 找到 jetty-webapp-9.2.8.v20150217.jar/org/eclipse/jetty/webapp/webdefault.xml, 
将 webdefault.xml 文件解压缩一份出来,用文本编辑器打开它,搜索找到 
useFileMappedBuffer 配置的行(该xml文件的157行),将 true 改成 false 以禁掉缓存。

<init-param>    
  <param-name>useFileMappedBuffer</param-name>    
  <param-value>false</param-value>    
</init-param> 
 
 
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

备注:先确认 jetty 服务已经停止,将原文件 
jetty-webapp-9.2.8.v20150217.jar/org/eclipse/jetty/webap/webdefault.xml 删除,将刚才那份修改好的 webdefault.xml 文件重新压缩进去即可。 
案例:我本地修改 
1.找到对应的jar包如: 
这里写图片描述 
2.选中该jar文件右击解压文件解压到当前文件夹如下截图: 
这里写图片描述 
3.打开解压后的文件找到webdefault.xml文件并进行如下操作: 
这里写图片描述 
这里写图片描述 
4.把webdefault.xml文件赋值到本地“src/main/resources”下并在pom.xml中添加如下配置: 
这里写图片描述

端口配置

jetty 默认使用的端口是 8080命令行的方式修改端口的命令是:mvn -Djetty.port=8095 jetty:run pom.xml 配置方式如下:

<configuration>  
   <connectors>
    <connector implementation="org.eclipse.jetty.server.nio.SelectChannelConnector">
    <port>8095</port>               
    <maxIdleTime>60000</maxIdleTime>
  </connector>
 </connectors>  
</configuration>
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

自动热部署

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

<configuration>
   <scanIntervalSeconds>2</scanIntervalSeconds>
</configuration>
 
 
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

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

手动重新加载

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

 <configuration>  
  <reload>manual</reload>  
</configuration> 
 
 
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

默认值为 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-HH:mm:ss</logDateFormat>
    <logTimeZone>GMT+8:00</logTimeZone>
    <append>true</append>
    <logServer>true</logServer>
    <retainDays>120</retainDays>
    <logCookies>true</logCookies>
   </requestLog>
</configuration> 
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

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:8095/” “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”

web上下文

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

<configuration>   
  <webApp>  
     <contextPath>/${project.artifactId}</contextPath>  
  </webApp>  
</configuration>  
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5

contextPath 的默认值的 /,${project.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> 
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

完整配置

<build>  
  [...]  
  <plugins>  
    <plugin>  
       <groupId>org.eclipse.jetty</groupId>  
       <artifactId>jetty-maven-plugin</artifactId>  
       <version>8.1.9.v20130131</version>  
       <configuration>  
         <connectors>
           <connector implementation="org.eclipse.jetty.server.nio.SelectChannelConnector">
             <port>8095</port>
             <maxIdleTime>60000</maxIdleTime>
          </connector>
         </connectors>  
         <stopKey>shutdown</stopKey>  
         <stopPort>8099</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>  
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43

配置完成后运行jetty服务,访问浏览器查看是否正常访问 
如下截图表示部署成功,且jetty端口号修改成功 
这里写图片描述
浏览器访问:localhost:8095/jQuery 
这里写图片描述 
备注:在pom.xml中若是修改了文件,则必须更新maven项目,然后选中pom.xml文件“Run AS”–“Maven build…”–“clean compile”、“clean package”、“clean install” 
查看控制台是否build success,若是不进行上述操作,直接执行jetty:run控制台会报错: 
LifecyclePhaseNotFoundException 
http://cwiki.apache.org/confluence/display/MAVEN/PluginConfigurationException

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值