Jetty7/8 的Maven插件配置:http://wiki.eclipse.org/Jetty/Feature/Jetty_Maven_Plugincss
Jetty9 最新的Maven插件配置:http://www.eclipse.org/jetty/documentation/current/jetty-maven-plugin.html 或者 最新RELEASE版配置html
Jetty 各個版本的限制:http://wiki.eclipse.org/Jetty/Starting/Jetty_Version_Comparison_Tableweb
Jetty 7 必須 Jdk 1.5+,Servlet 2.5,相似於 Tomcat 6,文章編寫時的 Release 版本:eclipse
<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 版本:maven
<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 做爲案例。ui
在項目的 pom.xml 裏面添加以下配置:spa
<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>
配置說明:.net
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的形式訪問親的網站了。
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>