印象中第一次聽到Jetty Server是在前兩三年的Open Source的Semilar場合,當時以為是用於Perl,後來才知它是100% pure Java寫成的Web Server,有什麼與眾不同的地方還不知道,不過像Struts2的Maven預設使用它,而近來也有Eclipse的Plugin的支援,踹了不少冤枉路。以下是在Eclipse 3.5建置方式:

  第一種:plugin http://www.webtide.com/eclipse,這種方式可以在Server view多出Jetty的選擇,但有個麻煩是,Maven專案並不是Web專案,在Server按右鍵選[Add and Remove]時,maven專案不能被篩選出deploy。

  第二種是自己建External Tools,這個也很麻煩就不用。

  第三種:plugin run-jetty-run,就會在[Run As/Run Configuration]下多出Jetty Webapp可以設定。截圖如下:

image

  這時可以在Jetty Webapp按右鍵去New一個新的Jetty啟動器,如上圖的app,當中要注意的是WebApp dir必須是含有WEB-INF的目錄,所以會是target/app,當config有所更改,必須執行mvn package(不是用Project/clean),target才會同步src的內容。之後按[Run]就可以啟動Jetty。

  啟動後還是發現Struts 2出錯,會出現類似以下的錯誤訊息:The package name 'myPackage' at location package - C:/project/target/app/WEB-INF/classes/struts.xml:8:43 is already been used by another package at location package。是什麼原因目前還不明白,但造成這個錯誤的原因倒是找到了。因為執行mvn package後,會在/target/app/WEB-INF/classes/下產出struts.xml,可是在Eclipse執行run-jetty-run,會自動從src取得一個struts.xml副本放在/target/app/classes下(少一個WEB-INF目錄),所以才有這樣的錯誤訊息。但每次在mvn package後就要刪除struts.xml,實在惱人。

  後來發現mvn clean後,target裡還有claesses和test-classes目錄,但無法從Eclipse的Project Explorer看出,只可以從檔案總管上找到或是在編輯一個新的run-jetty-run看到。經過測試,不管移除/target/app/WEB-INF/classes/下的struts.xml還是移除classes目錄,Jetty才能正常Run。

arrow
arrow
    全站熱搜

    Jemmy 發表在 痞客邦 留言(0) 人氣()