Eclipse下通過Maven的Jetty插件運行Web工程的配置

Eclipse下通過Maven的Jetty插件運行Web工程的配置,包括啓動https
摘要
之前寫了Eclipse下怎麼通過 Maven 的 Tomcat 插件來運行 Web 工程。近日聽說 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.10.v20150310</version>
</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 配置表示工程的虛擬目錄名


步驟二

使用Eclipse的Maven Build運行,Goals配置,如圖:

這個配置表示 jetty 運行時的端口號。

jetty:run -Djetty.port=9080

另外,截圖的綠色部分是因爲我的Web應用的 log4j.xml 中使用了 ${sys:catalina.base} 這個Tomcat的環境變量,在啓動 Jetty 時會報錯,添加了 catalina.base 這個配置後就可以解決這個問題了。還有一個問題是,這個配置必須配置到 Parameter 中,成爲啓動參數。

以上方案配置完成之後,第一次運行時,Maven會自動去下載插件依賴,編譯並運行Web應用,成功之後就可以愉快的通過HTTP的形式訪問親的網站了。


混合使用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>changeit</password>
                    </connector>
                </connectors>
            </configuration>
         </plugin>
      </plugins>
    ....
  </build>
  ....
</project>

說明,從配置中可以看出,添加了connectors配置,一個是http的配置,一個是https的配置。

connector.port 是端口號,這個端口號必須設置,且優先級比 -Djetty.port 高。

connector.password 是 .keystore 的密碼,https 連接必須設置,當前使用了 Tomcat 一樣的密鑰 changeit。

.keystore 文件的創建方法請查看上一篇博客 Eclipse下通過Maven的Tomcat插件運行Web工程的配置,包括啓用https


步驟二

跟 單獨使用HTTP的步驟二 相似,但可以去掉 -Djetty.port=9080 這個配置。

以上配置完成後,運行,就可以通過 http 和 https 兩種形式訪問親的網站了


總結

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

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

我對 Jetty 的嘗試還非常粗淺,希望看到這篇博客的同學能夠多多賜教。

補充

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的配置要改爲:
                        <connector implementation="org.eclipse.jetty.server.bio.SocketConnector">
                            <port>8080</port>
                        </connector>
                        <connector implementation="org.eclipse.jetty.server.ssl.SslSocketConnector">
                            <port>8443</port>
                            <password>changeit</password>
                        </connector>


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章