08 4月 2010

m2eclipse與Jetty 7

Jetty是一個小巧又能高度客製化的Servlet Container,在很多場合可能會比Tomcat要來得方便,但是在配合Eclipse開發時有點缺憾,就是Jetty配合可用的Server Adapter更新不快,Jetty7至今仍未有一個方便的Server Adapter可以像使用Tomcat一樣快速Deploy,不過利用m2eclipse也可以減少利用Jetty7開發時的不便。
第一步:當然是要會裝m2eclipse....
第二步:修改pom.xml,加入maven-jetty-plugin
<plugin>
 <groupId>org.mortbay.jetty</groupId>
 <artifactId>jetty-maven-plugin</artifactId>
 <version>7.0.2.v20100331</version>
 <configuration>
 <scanIntervalSeconds>10</scanIntervalSeconds>
 <webAppConfig>
 <contextPath>/sample</contextPath>
 </webAppConfig>
 <stopPort>9966</stopPort>
 <stopKey>stop</stopKey>
 </configuration>
</plugin>
其中<contextPath>就是你想訂的web context名稱,如果不加會變成root context而不是依你web.xml中所訂的<display-name>。而<stopKey>跟<stopPort>也請務必要加,否則jetty:stop會無法正常使用。
第三步:在Eclipse加上Run/Debug Configurations,
(1)Jetty Run:
在"Main" Tab中
Base directory中輸入${project_loc}
Goals輸入jetty:run
(2)Jetty Stop:
在"Main" Tab中
Base directory中輸入${project_loc}
Goals輸入jetty:stop
(3)Jetty Debug:
先同於Jetty Run一樣
在"Main" Tab中
Base directory中輸入${project_loc}
Goals輸入jetty:run
然後在"JRE" Tab中
VM arguments:輸入
-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=4000,server=y,suspend=n
其中address=4000,4000是指Remote debug所用的port,只要不被其他Server佔用就好。

(4)Remote Debug
加入一個Remote Java Application的設定
在這project就必需指定,不能用變數,主要是為了確認Java Source Code與Remote Application的對應,再來host填localhost,當然不一定要是localhost,也可以是其他IP,但是上列的情形來看一定是localhost,Port則是要同於上列(3)所指定的Port。
這樣一來,除了可以不離開Eclipse而啟動關閉Jetty外,也可以利用Remote Debug來做Debug的操作,雖然不能同於Server Adapter一樣方便,但只要會這方法,之後遇到其他Server也不用擔心。
ps;m2eclipse 0.10在設定Maven Build時有點問題,當你要輸入Base directory時請確認你的滑鼠是點在 Package Explorer中的某一個Project名稱而不是Project下某一檔案,否則會警告Base directory設定有誤。

1 則留言:

Unknown 提到...

RunJettyRun 這隻Eclipse plug-in nightly build 有支援jetty7了。 ;)

官方板應該這個月底會推出正式的支持。