zoukankan      html  css  js  c++  java
  • Maven集成jetty插件

    本机环境

    JDK 7 Maven 3.2 Jetty 8.1.9 Eclipse Luna

    pom.xml 配置

    在你的 pom.xml 文件里加入 jetty 插件的描写叙述信息(查看Jetty很多其它的版本号信息):
    [...]  
    <build>  
      <plugins>  
        <plugin>  
          <groupId>org.mortbay.jetty</groupId>  
          <artifactId>jetty-maven-plugin</artifactId>  
          <version>8.1.9.v20130131</version>  
        </plugin>  
      </plugins>  
    </build>  
    [...]  


    启动 & 停止

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

    jetty 8 部署的项目的 Context path 默认是 /。也就是说,项目的訪问入口地址是:http://localhost:8080(不带项目名)
    假设你希望通过命令 mvn jetty:stop 运行关闭 jetty 服务。你须要像以下一样在你的 pom.xml 配置文件里加入一个特殊的port和控制键: 
    <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 文件又一次压缩进去就可以。

    port配置

    jetty 默认使用的port是 8080,命令行的方式改动port的命令是: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>8.1.9.v20130131</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

  • 相关阅读:
    ORA-39126 KUPW$WORKER.PUT_DDLS [TABLE_STATISTICS]中Worker发生意外致命错误
    C# 9 新特性 —— 增强的 foreach
    在 xunit 测试项目中使用依赖注入
    gitee.com 码农中添加私有仓库并通过ssh链接
    强化学习 —— reinforce算法中更新一次策略网络时episodes个数的设置对算法性能的影响 —— reinforce算法中迭代训练一次神经网络时batch_size大小的不同设置对算法性能的影响
    如何在 Ubuntu18.04 server 服务器版本的操作系统下 配置IP
    东北某海滨城市的某高校的某分校区的校园网登录程序,(python3, 模拟浏览器的登入方式)
    强化学习中经典算法 —— reinforce算法 —— (进一步理解, 理论推导出的计算模型和实际应用中的计算模型的区别)
    【转载】 Linux 设置CPU Performance模式
    深度学习中使用TensorFlow或Pytorch框架时到底是应该使用CPU还是GPU来进行运算???
  • 原文地址:https://www.cnblogs.com/brucemengbm/p/7056143.html
Copyright © 2011-2022 走看看