隨筆-126  評論-247  文章-5  trackbacks-0

          本機環(huán)境

          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 執(zhí)行關閉 jetty 服務,你需要像下面一樣在你的 pom.xml 配置文件中添加一個特殊的端口和控制鍵:
          <configuration>
            [...]
            <stopKey>shutdown</stopKey>
            <stopPort>9966</stopPort>
            [...]
          </configuration>
          你仍可以通過 mvn jetty:run 啟動 jetty 服務,可以通過 mvn jetty:stop 來停止 jetty 服務。

          取消文件映射緩存

          jetty 默認開啟了 useFileMappedBuffer,在 jetty 運行期間,頁面所使用的靜態(tài)文件(如 css 文件等)不允許修改。如果你嘗試去修改它
          們,保存的時候就會出現(xiàn) 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 服務已經(jīng)停止,將原文件 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 的數(shù)值表示開啟,0 表示關閉,單位為秒。以配置數(shù)值為一個周期,自動的掃描文件檢查其內(nèi)容是否有變化,如果發(fā)現(xiàn)文件的
          內(nèi)容被改變,則自動重新部署運用。命令行的方式:mvn -Djetty.scanIntervalSeconds=2 jetty:run 。

          手動重加載

          在你的 pom.xml 文件中添加如下配置,reload 的可選值 :[automatic|manual]
          <configuration>
            [...]
            <reload>manual</reload>
            [...]
          </configuration>
          默認值為 automatic,它與大于 0 的 scanIntervalSeconds 節(jié)點一起作用,實現(xiàn)自動熱部署的工作。設為 manual 的好處是,當你改變文件
          內(nèi)容并保存時,不會馬上觸發(fā)自動掃描和重部署的動作,你還可以繼續(xù)的修改,直至你在 Console 或命令行中敲回車鍵(Enter)的時候才觸發(fā)重
          新加載的動作。這樣可以更加的方便調(diào)試修改。命令行的方式是: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.NCSARequestLogorg.eclipse.jetty.server.RequestLog 的一個實現(xiàn)類。
          org.eclipse.jetty.server.NCSARequestLog 是一種偽標準的 NCSA 日志格式。下面是一些節(jié)點參數(shù)的解釋:
          filename:日志文件的名稱
          filenameDateFormat:日志文件的名稱的日期格式,它要求日志文件名必須含有 yyyy_mm_dd 串
          logDateFormat:日志內(nèi)容的時間格式
          logTimeZone:時區(qū)
          append:追加到日志
          logServer:記錄訪問的主機名
          retainDays:日志文件保存的天數(shù), 超過刪除
          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 在啟動時會把當前服務進程的內(nèi)存信息輸出到控制臺中,但這并不會保存到文件中。

          WEB上下文

          最常用的是 contextPath,它的配置如下:
          <configuration>
            [...]
            <webApp>
              <contextPath>/${project.artifactId}</contextPath>
            </webApp>
            [...]
          </configuration>
          contextPath 的默認值的 /,${project.artifactId} 引用了 <artifactId> 節(jié)點的值,即項目的名稱。
          項目的靜態(tài)資源文件目錄默認是 src/main/webapp,如果靜態(tài)資源目錄有多個,或者不在默認的 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>
          引用靜態(tài)資源文件時,路徑不包含資源目錄的名稱,如 commons/main.css,引用方式為:<link href="main.css" rel="stylesheet" /> 
          更多參數(shù)信息可參考 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


            
          posted on 2015-06-23 15:05 fancydeepin 閱讀(49076) 評論(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 | yuxh
          內(nèi)容格式都很清晰,希望博主提供jetty更深入一點的介紹和應用(優(yōu)點、為什么在maven中使用這個插件、和tomcat插件比怎么樣、和CARGO怎么聯(lián)系)  回復  更多評論
            
          # re: maven jetty 插件使用 2015-12-25 10:06 | 邱哥
          博文寫的很詳細,非常棒!!  回復  更多評論
            
          # re: maven jetty 插件使用 2016-01-21 16:16 | hyuga
          贊,樓主寫得真棒  回復  更多評論
            
          主站蜘蛛池模板: 阿瓦提县| 兰考县| 陈巴尔虎旗| 抚顺市| 衡南县| 鲁山县| 博乐市| 惠州市| 九龙城区| 桂平市| 灵台县| 长海县| 化州市| 九龙县| 水城县| 包头市| 射阳县| 交口县| 沁水县| 台北县| 嘉义市| 龙里县| 阳山县| 汉川市| 大连市| 太白县| 安义县| 关岭| 镇原县| 衡山县| 徐州市| 西吉县| 郁南县| 普兰店市| 通江县| 库伦旗| 上栗县| 津市市| 巩留县| 西青区| 通化市|