主要目的:如何在 eclipse 利用 maven 建立 struts2 並在 eclipse internal runtime Server: Tomcat 作開發環境測試
平台:
eclipse:
Version: Kepler Service Release 2
Build id: 20140224-0627
maven:Maven Integration for Eclipse (Luna and newer) 1.5
tomcat:apache-tomcat-7.0.52_x64
java:jdk1.7.0_45_x64
jboss:JBoss EAP 6.2.0.GA
step01:建立一個 struts2-archetype-blank 的 maven 專案
可以按一下 Add Archetype,建立一個空的 Struts2 專案,相關欄位資訊可以查:http://struts.apache.org/release/2.2.x/docs/struts-2-blank-archetype.html
填入此專案相關的資訊
目前的 Struts2 專案: guEBS 架構如下:
Step02:轉換成為 Dynamic Web project
選擇此專案 guEBS 按下滑鼠右鍵,選擇 Properties 裡的 Project Facets ,按下 Covert to faceted form...
先將 java 的版本改為 1.7 ,再將 Dynamic Web project 的 check box 打勾,此時下方會出現 "Further configuration available...",Content directory 原本是 WebContent ,修改為 src/main/webapp。
再到 Deployment Assembly 將 Maven Dependencies 加入,然後按 Apply -> ok。
Step03:Deploy to Internal runtime Server:Tomcat 測試
執行 Maven build 時, 應該在 target 目前下會產生 guEBS-1.0.0-SNAPSHOT.war,這個檔直接可以佈署在 JBoss 下執行。
也可以佈署在 eclipse 內的 runtime server,這裡 runtime server 使用的是 apache-tomcat-7.0.52_x64
執行時,會出現下列的錯誤訊息:The method getJspApplicationContext(ServletContext) is undefined for the type JspFactory
Messages:
Unable to compile class for JSP: An error occurred at line: [42] in the generated java file: [D:\wei_workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\work\Catalina\localhost\guEBS\org\apache\jsp\example\HelloWorld_jsp.java] The method getJspApplicationContext(ServletContext) is undefined for the type JspFactory Stacktrace:
The method getJspApplicationContext(ServletContext) is undefined for the type JspFactory 的異常的原因及解決辦法。
原因:這是由於工程的WEB-INF/lib下存在 jsp-api.jar、servlet-api.jar,與Tomcat自帶的jar包衝突造成的。
解決辦法:
從 pom.xml 檔中移除 jsp-api.jar、servlet-api.jar 的 dependency 設定
<!-- 本機 Tomcat 測試時, servlet-api , jsp-api 不要載入 <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.4</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jsp-api</artifactId> <version>2.0</version> <scope>provided</scope> </dependency> --> |
在測試一次,就沒有問題了,但若是佈署在 JBoss EAP 6.2.0.GA 則不需要在 pom.xml 檔的內文中移除 jsp-api.jar、servlet-api.jar 的 dependency 設定。
注意:若要重新作 maven build 產生 guEBS-1.0.0-SNAPSHOT.war 檔時,jsp-api.jar、servlet-api.jar 的 dependency 設定要加回來,不然會有錯誤訊息。
參考:
http://struts.apache.org/release/2.2.x/docs/struts-2-maven-archetypes.html
https://wiki.base22.com/display/btg/How+to+create+a+Maven+web+app+and+deploy+to+Tomcat+-+fast
http://www.avajava.com/tutorials/lessons/how-do-i-deploy-a-maven-web-application-to-tomcat.html
http://developer.51cto.com/art/201205/338496.htm
留言列表