Appfuse是一個融合當前各種框架的web應用最佳實踐。從名字可以看出:App=框架應用,fuse=熔合。
Appfuse涉及的東西較多,也大都有實用價值。這系列文會一一道來,一是分享,二是為了自己記憶得更加深刻。我覺得,任何東西說開了都很簡單。所以會盡量用簡單直白,使自己能看懂的敘述方式說出來。
如有錯誤,希望大家本著共享的精神指出。謝謝!(轉載請保留:
shenleimail@vip.qq.com)
安裝部署篇:
Appfuse的最新版本是2.0.1,基于maven管理并發布的。因此,在安裝Appfuse之前,我們需要了解maven的一些基礎知識。
maven的核心是對POM(Project Object Model)項目對象模型的管理。就我的理解來看,項目對象模型應該包括了依賴項(所需外部jar包)、source、resource等項目相關的對象,maven用一個生命周期的概念對它們進行管理。所以在maven的命令里面包含了發布、生成、清理、運行、刪除等命令。而依賴項并不是一個項目所獨有的,可能有多個項目用到同一個jar包。因此在maven的概念中依賴項又和POM互相獨立。如圖:
此主題相關圖片如下:

理解了maven的生命周期管理,再去看它的命令和操作,都是和相應的生命期對應的。其中有一些通過插件方式實現,比如用jetty運行Appfuse,命令為:mvn jetty:run-war
下面只介紹和Appfuse安裝相關的maven操作:
1、下載并解壓maven最新版,不得低于2.0.6(假設路徑為:E:\soft\maven);
2、設置環境變量:M2_HOME=E:\soft\maven,將%M2_HOME%/bin加入PATH中;
3、dos模式下輸入mvn -version,能看到正確的版本信息為止(可能需要重啟);
安裝好maven之后,需要建立本地依賴項庫。到[url=https://appfuse.dev.java.net/servlets/ProjectDocumentList?folderID=8417&expandFolder=8417&folderID=0]https://appfuse.dev.java.net/servlets/ProjectDocumentList?folderID=8417&expandFolder=8417&folderID=0[/url]下載[url=https://appfuse.dev.java.net/files/documents/1397/77087/appfuse-dependencies-2.0.1-with-source-and-javadoc.zip]Dependencies (with source and javadoc)[/url] 142.83M,解壓到某個地方。
到E:\soft\maven\conf中打開setting.xml文件,在<settings>節點下加入<localRepository>你解壓的路徑</localRepository>。
到此為止,準備工作已完成。
新建一個目錄,準備安放Appfuse項目工程。例如為:D:\Project\appfuse2.0.1
在dos模式下進入此目錄,確保在線的情況下運行如下命令(這里以Spring MVC Basic為例,如要其他類型,請參考Appfuse官方文檔):
mvn archetype:create -DarchetypeGroupId=org.appfuse.archetypes -DarchetypeArtifactId=appfuse-basic-spring -DremoteRepositories=http://static.appfuse.org/releases -DarchetypeVersion=2.0.1 -DgroupId=com.webstudio.app -DartifactId=appfuse-spring
com.webstudio.app及appfuse-spring這兩個變量是可以修改的。com.webstudio.app表示項目根路徑,appfuse-spring表示項目名稱及新建的文件夾名稱。
運行過程中,會看到一系列的waring警告,不用管。等看到:Builde Success,表示成功了。maven會在D:\Project\appfuse2.0.1下新建appfuse-spring目錄,里面含有最重要的pom.xml文件。
修改pom.xml,在最下面有數據庫的配置。若你是mysql數據庫,則很簡單,只需修改用戶名和密碼(默認為root和空)。若是其他數據庫,請參照pom.xml里面的數據庫配置文件進行替換修改。
修改好之后,在dos模式下進入D:\Project\appfuse2.0.1\appfuse-spring,運行mvn appfuse:full-source。這也是個很快的過程。
之后,在相同的路徑下執行:mvn jetty:run-war。jetty是一個jsp容器(類似Tomacat),以jar包的形式跟隨項目發布,方便部署。此命令會打包生成appfuse-spring-1.0-SNAPSHOT.war并測試發布,在測試時會有一些異常信息。不用理會,只是一些測試數據沒有準備好。
等到一切就緒(出現[INFO] Starting scanner at interval of 3 seconds.),打開你的瀏覽器,輸入http://locathost:8080。如果看到Appfuse的登錄頁面,那么恭喜你,你已經順利的安裝了Appfuse。maven是個不錯的工具,但我們不能用maven來做所有事。軟件需要部署到IDE上才有更好的開發效率,maven可以充當IDE的一個輔助工具。目前來看,我更傾向用maven管理依賴項,用IDE管理軟件生命周期。
eclipse和netbeans都是不錯的IDE,但遺憾的是,他們的maven插件機制還有所欠缺。從表面來看,netbeans要比eclipse做得更好,因為它可以直接建立maven項目,也可以在命令中使用maven插件機制build項目(“run”始終有點問題)。但從實際來說,我更傾向eclipse的方式,只讓maven管理依賴項,生命周期還是交給IDE更加方便。
appfuse官網上關于如何使用IDE部署和調試項目語焉不詳,只是建議以mvn jetty:run-war的方式發布。這是脫離項目實際的,很多人都習慣了在IDE中編輯和調試項目。文檔中關于appfuse在eclipse的部署實踐不甚令人滿意,我們需要重新動手解決這一切。
我的環境是:eclipse+myeclipse+tomcat6
首先,用maven的方式。在項目路徑下運行:mvn eclipse:eclipse建立適合eclipse環境的工程。
在eclipse中導入項目,運行一次mvn jetty:run-war并確保項目已正常運行,這樣會在target目錄下生成部署需要的文件夾和war包。
選擇項目屬性,在“java build path”——“source”中去掉“src/main/webapp”文件夾。
在文件夾中打開項目路徑下的appfuse-spring-1.0-SNAPSHOT目錄,將WEB-INF/classes下的所有資源文件拷貝并覆蓋到src/main/resources下,并將WEB-INF/lib復制到src/main/webapp/WEB-INF/lib中。
用myeclipse的“add myeclipse web capabilities”命令建立web模塊。路徑指引到src/main/webapp中。在項目下新建目錄webapp,采用link folder的方式鏈接到src/main/webapp。這樣可以讓webapp在最上層,方便編輯。
用myeclipse將webapp發布到tomcat中,還需要注意一個問題,不能把所有依賴jar包都發布,否則會引起包沖突。在這里選擇項目屬性——Myeclise——Web——Deployment——Libirary Deployment Policies中去掉所有勾。
現在eclipse中運行tomcat,不出意外就順利部署成功了。這種方式保留了采用maven發布和在eclipse中發布兩種方式,在激活eclipse的maven插件后,也能用maven來管理依賴項。
對于netbaens,個人建議采用普通的web應用方式部署,將剛才在eclipse中部署好的文件一一對應拷貝過去即可。不建議用netbeans的maven插件進行部署,因為那實在不大好用。
安裝部署篇就到這里,下一篇正式進入Appfuse的世界。
........to be continue