1. 程式人生 > >Maven的Jetty外掛執行Web工程的配置,包括啟動https

Maven的Jetty外掛執行Web工程的配置,包括啟動https

摘要: 通過 Maven 的 Tomcat 外掛來執行 Web 工程,每次啟動Tomcat速度很慢,開發起來不爽。聽說 Jetty 可以動態載入修改後的類, 為了能夠更快提高開發效率, 絕對要嘗試一下。

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>

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>


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.6.v20141205</version>  
    <configuration>  
 <jettyConfig>${project.basedir}/src/main/resources/config/jetty.xml,${project.basedir}/src/main/resources/config/jetty-ssl.xml,${project.basedir}/src/main/resources/config/jetty-https.xml</jettyConfig>  
        <stopKey>STOP</stopKey>  
        <stopPort>9999</stopPort>  
        <stopWait>5</stopWait>  
        <scanIntervalSeconds>5</scanIntervalSeconds>  

        <httpConnector>

             <port>8090</port>

        </httpConnector>
        <scanTargets>  
           <scanTarget>${project.basedir}/src/main</scanTarget>  
           <scanTarget>${project.basedir}/src/test</scanTarget>  
       </scanTargets>  
       <webAppConfig>  
          <contextPath>/${project.artifactId}</contextPath>  
       </webAppConfig>  
    </configuration>  
</plugin>

國內很多應用也許會去升級JDK版本,但往往還在使用Servlet2.5做開發,所以本文使用 Jetty 8 作為案例。



單獨使用HTTP

步驟一


在專案的 pom.xml 裡面新增如下配置:


<project>
  ....
  <build>
    ....
      <plugins>
        <plugin>
           <groupId>org.mortbay.jetty</groupId>
           <artifactId>jetty-maven-plugin</artifactId>
           <version>8.1.16.v20140903</version>
           <configuration>
               <scanIntervalSeconds>5</scanIntervalSeconds>
               <webApp>
                   <contextPath>/test</contextPath>
               </webApp>
            </configuration>
         </plugin>
      </plugins>
    ....
  </build>
  ....
</project>

配置說明:

configuration.scanIntervalSeconds 配置表示新程式碼的掃描時間間隔(秒),值 <= 0 表示不掃描
configuration.webApp.contextPath 配置表示工程的虛擬目錄名

混合使用HTTP和HTTPS


步驟一


pom.xml 裡面的配置改為如下:


<project>
  ....
  <build>
    ....
      <plugins>
        <plugin>
           <groupId>org.mortbay.jetty</groupId>
           <artifactId>jetty-maven-plugin</artifactId>
           <version>8.1.16.v20140903</version>
           <configuration>
               <scanIntervalSeconds>5</scanIntervalSeconds>
               <webApp>
                   <contextPath>/test</contextPath>
               </webApp>
               <connectors>
                    <connector implementation="org.eclipse.jetty.server.nio.SelectChannelConnector">
                        <port>9080</port>
                    </connector>
                    <connector implementation="org.eclipse.jetty.server.ssl.SslSelectChannelConnector">
                        <port>9443</port>
                        <password>xxxx</password>
                    </connector>
                </connectors>
            </configuration>
         </plugin>
      </plugins>
    ....
  </build>
  ....
</project>
說明,從配置中可以看出,添加了connectors配置,一個是http的配置,一個是https的配置。\
connector.port 是埠號,這個埠號必須設定,且優先順序比 -Djetty.port 高。
connector.password 是 .keystore 的密碼,https 連線必須設定

說明:配置jetty+ssl請參考其他文件 http://zhangwei8607.iteye.com/blog/2205127

idea配置Jetty9

步驟1:

commond line 新增配置:

org.mortbay.jetty:maven-jetty-plugin:xx.xx.xx:run(jetty9的版本)

如圖

1、


2、


pom檔案中加入

<plugins>  
<plugin>  
<groupId>org.eclipse.jetty</groupId>  
<artifactId>jetty-maven-plugin</artifactId>  
<version>9.2.1.v20140609</version>  
</plugin>  
 </plugins>

3、修改埠

Runner選項->VM Options 設定 -Djetty.port=8081


總結


Jetty 的定時過載程式碼的實現比 Tomcat 的好很多,使用 Tomcat 的 onreload 經常修改幾下就整個應用在重啟,速度慢,而且經常排隊,非常耗時。

Jetty 的配置對 pom.xml 的侵入比較大,尤其是 http 和 https 的混合配置更是需要在 pom.xml 中配置固定的埠號,讓程式碼看起來不夠乾淨。

補充

Jetty有一個問題,預設使用nio連線會把資原始檔(html, css)鎖定,解決方案是把nio改為bio:

<connector implementation="org.eclipse.jetty.server.nio.SelectChannelConnector">
<port>9080</port>
</connector>
<connector implementation="org.eclipse.jetty.server.ssl.SslSelectChannelConnector">
<port>9443</port>
<password>changeit</password>
</connector>
<connector implementation="org.eclipse.jetty.server.bio.SocketConnector">
<port>8080</port>
</connector>
<connector implementation="org.eclipse.jetty.server.ssl.SslSocketConnector">
<port>8443</port>
<password>xxxx</password>
</connector>