Tuesday, December 2, 2008

如何在 eclipse 3.4 下跑 appfuse 2.0.2

因為工作性質的關係(一堆同時進行的專案),在系統的開發上需要有效率的執行,不能每次都從頭來,但已做過的專案又會因其特性的不同而造成 reuse 的機會降低,所以當時找了一個不是 framework 的 framework 當作開發的 initial startup ,裡面含有當下最新的技術,不用在自行組裝要用的 package,以降低開發時所需的時間與精力

Appfuse 目前最新版的是 2.0.2 ,用的整合工具是 maven 2.0.x ,但只能用 command line 做 build 及 run ,無法直接用在 IDE 的環境上。說實在的,借由 IDE 的輔助,可以省掉一些 coding 的時間,尤其是在 gen getxx 與 setxx 的 java code 時,助益不少

經我測試過,Appfuse 2.0.2 在 Netbeans 6.5 下完全沒有問題,可見 Netbeans 越來越成熟了,但在 eclipse 3.4 下則必須還要做些微修正才能符合 eclipse 的環境,做到 hot deployment 及減少修改 code 後還要重新 deployment 所浪費的時間

以下為修改步驟以便讓 appfuse 2.0.2 適用於 eclipse 3.4
PS : 請先安裝 JDK1.6, eclipse 3.4 JEE, maven 2.0.9, m2eclipse, mysql

1. 安裝 eclipse 3.4
下載 eclipse 3.4 並解壓縮到 d:\Java (目錄為 d:\Java\eclipse)
利用 eclipse 的 Help > Software Update > Available Software > Add site 安裝 m2eclipse plugin。
此 plugin 的 url 為 http://m2eclipse.sonatype.org/update/

2. 安裝 maven-2.0.9 及設定環境變數
下載 maven-2.0.9 到 d:\Java (目錄為 d:\Java\apache-maven-2.0.9)
set M2=D:\Java\apache-maven-2.0.9\bin
set M2_HOME=D:\Java\apache-maven-2.0.9
set MAVEN_OPTS=-Xms256m -Xmx512m
set PATH=%M2%;%PATH%

編輯 d:\Java\apache-maven-2.0.9\conf\settting.xml
line 49 將 localrepository 的內容改成 D:\Java\apache-maven-2.0.9\repository

PS:因 maven 預設值會將 repository 放到 c:\Document2 and Settings\.m2 中,這樣用不同的人 login ,其 repository 就需要跟著異動。放到 d:\Java\apache2-maven-2.0.9\repository 的好處在於將來 team 可以用同樣的設定作業,避免因環境的不同而需要花額外的時間做環境設定

3. 建立 appfuse 2.0.2 的 archetype
d:\projects> mvn archetype:create -DarchetypeGroupId=org.appfuse.archetypes -DarchetypeArtifactId=appfuse-basic-jsf -DremoteRepositories=http://static.appfuse.org/releases -DarchetypeVersion=2.0.2 -DgroupId=com.mycompany.app -DartifactId=myproject

PS : 此時可以去喝一杯咖啡了,因為要很久。若要節省時間,可以下載 dependency 並解壓縮到 d:\Java\apache-maven-2.0.9\repository

4. 取得 appfuse 的 source code 以便日後 debug 用
d:\projects> cd myproject
d:\projects\myproject> mvn appfuse:full-source

5. 修改 root 的密碼
因 預設在 myproject 中的 pom.xml 的 mysql 密碼為 "空白",所以必須將此部份的空白填入真正的 root 密碼,在做 install 時才能將 table 及 測試資料放到 mysql 的資料庫中。編輯 pom.xml 並在 line 982 修改 <jdbc.password>
</jdbc.password> 為 <jdbc.password>root</jdbc.password> (假設 mysql root 的密碼為 root)


6. 利用 command line 啟動 appfuse
d:\projects\myproject> mvn jetty:run-war
一旦執行此 mvn jetty:run,appfuse 就會直接啟動在 port 8080。此時可以用 firefox 檢測 appfuse 是否啟動成功。將 url 指向 http://localhost:8080 可以得到此畫面



















7. 匯入 myproject 到 eclipse 中
確認 appfuse 執行無誤後, 請執行
d:\projects\myproject> mvn eclipse:eclipse
這時候會在 d:\projects\myproject 目錄下產生 .settings 目錄及 .project, .classpath 檔

然後打開 eclipse ,利用 File > Import > General > Maven Projects 再將 Root Directory 指到 d:\projects\myproject 再按 Finish





























這裡可看到 myproject 已經被匯入到 eclipse 中了


8. 修改 eclipse WTP 專用的設定檔

若要讓 appfuse 可以在 eclipse WTP 上執行,必須做稍微的修正,才能直接在 eclipse 上啟動 tomcat 並 deploy appfuse

修改 .setting\org.eclipse.wst.common.component
刪除 <wb-resource deploy-path="/" source-path="src/main/webapp"/>
刪除 <wb-resource deploy-path="/" source-path="src/main/resource"/>
增加
<wb-resource deploy-path="/" source-path="target/myproject-1.0-SNAPSHOT"/>

修改 .classpath
刪 除 <classpathentry kind="src" path="src/main/resources" excluding="ApplicationResources_de.properties|ApplicationResources_fr.properties|ApplicationResources_ko.properties|ApplicationResources_nl.properties|ApplicationResources_no.properties|ApplicationResources_pt*.properties|ApplicationResources_tr.properties|ApplicationResources_zh*.properties|applicationContext- resources.xml|**/*.java"/>
增 加 <classpathentry kind="con" path="org.eclipse.jst.server.core.container/org.eclipse.jst.server.tomcat.runtimeTarget/Apache Tomcat v6.0"/>
增加 <classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.web.container"/>

然 後按 F5 做 refresh 後,接著在 myproject 按右鍵 > Run As > Run on Server > 選 Tomcat v6.0 > Finish 。在畫面可以看到 myproject 直接執行在 eclipse 上




















9. 注意事項
9.1 若要改 jsp ,必須改 target/myproject-1.0-SNAPSHOT 下面的 jsp 檔,測試完後再 copy 回 src\main\webapp 下,因為修改後的 WTP 只吃 target/myproject-1.0-SNAPSHOT 下的 jsp。
9.2 若改 jsp 後 refresh browser 無法立即呈現修改後的狀態,需要 close myproject 在 open myrpoejct。這是因為手動改 wtp 設定檔,需 reopen myproject 才行

No comments: