如果你或你的团队至今为止还没有搭建一个完整的JavaEE应用程序框架,如SSH(Struts+Spring+Hibernate),而你的老板却在摧促你尽快提交下一个项目的技术说明书,也许这个时候你应该考虑一下AppFuse ,一个开箱即用(Out of box)的,完整的JavaEE应用程序框架。它以Spring为核心,构建了一个完整的JavaEE应用程序的雏形,允许安照编程人员的习惯使用不同的前端技术(如Struts2,JSF等)和ORM工具(如Hibernate,iBates等)。
根据AppFuse首页的介绍,其作者Matt Raible是一位崇尚敏捷方法的Java大牛与RoR爱好者。在看过AppFuse一部分代码之后,确实有一种“原来可以这样做。。。”的感觉。如果你现在不需要一个新的JavaEE应用程序框架,也不妨下载其源码学习一下大师级的JavaEE之道。
废话完毕。现在开始进入正题。在所有事情开始之前,我们要做的第一件事就是把AppFuse开发环境部署到本地的机器上来。(其实,当你完成这件事情以后,你会发现你已经完成了一半 所有要做的事情:P) 在AppFuse的主页上有一篇QuickStart ,很详细的说明了把AppFuse开发部署到本地的每一个步骤,但是其中文版本打开之后是乱码。所以我在这里结合自己的经验也写了一个简单的说明,希望能与官方版本互为补充。
与大多数开发工具不同,AppFuse并没有提供二进制包或源码的打包下载,它只提供了一个Maven2的工程脚本来从官方的仓库(Repository)中下载并自动配置好环境。(听上去很方便,不,他是恶梦的开始-_-!)
所以首先我们要做的就是从Apache下载Maven2 ,解压并放到你硬盘上的某个位置,把bin目录下的mvn.bat 文件的路径放到PATH中。
AppFuse提供了几种默认组合 供选择使用,(其实主要是前端技术不同的封装)包括了
其中,每个版本各有两种模式:
确定你所需要的版本,把表格中对应的mvn命令Copy下来,在命令行执行它。在那一长串命令中有一个"-DartifactId=myproject"的参数设置,表示会在命令的执行位置新建一个名为myproject的文件夹,作为下载下来的AppFuse程序的主目录。
接下来,把所有窗口最小化,可以去找朋友聊聊天,可以去外面抽根烟,溜达溜达,但是千万不要坐在电脑前傻傻的观察那慢得令人吐血的下载进度。Maven2会把所有有Dependencies的Artificiality全部从位于美利坚的官方仓库使用单线程方式下载下来,我用整整4个多小时,才下载到本次下载的目的——一个大小为43kb的pom.xml 文件,而不是官方Quickstart中提到的一杯咖啡的时间。更不幸的是,在下载大文件的时候,比如2mb以上,Maven常常会掉线并卡在哪里一动不动,这时候你要果断的按下Ctrl+C,使用迅雷之类的下载工具把Console上提示的正在下载的文件下下来,并放到本地的Repository里面去,通常是"C:\Documents and Settings\UserName\.m2\repository"的对应路径下。如果要在本地多台机子上使用Maven的话,可以配置一个Proxy以大大提高工作效率。
如果你跟我一样幸运可以看到了Build Successfully的话,那么你应该可以在myproject文件夹下发现这几个文件:
AppFuse的下载仍然是通过Maven2来完成(是的,再一次漫长的等待,更加的漫长。。。),而且将下载完成后的部署与测试也一并完成。所以在下载之前,我们要为之准备运行的环境。
首先是Mysql,确认你的Mysqld已经启动并正常运行。AppFuse默认使用Mysql,如果你要使用别的数据库,那么请修改pom.xml的数据源配置。
接下来是应用服务器。在官方QuickStart并没有提到需要配置服务器,因为跟据默认配置会自动下载一个Tomcat5.5在临时目录并使用它来启动服务。如果你的本地环境上已经装有Tomcat了,那么大可不必多此一举。这里我简单介绍一下如何使用本地的Tomcat。首先确认%Catalina_HOME%配置正常,然后打开pom.xml文件,找到<groupId>org.codehaus.cargo</groupId>这个节点,把<home>节点的注释去掉,再把<zipUrlInstaller>节点给注释掉就可以了。
准备完之后,在myproject文件夹的命令行下,执行mvn命令。然后。。。等待。。。
终于,亲切的Build Successfully再次出现了,一天也差不多要过去了,现在让我们来试运行一遍AppFuse吧。在刚才新建的目录下输入"mvn jetty:run-war"使用内置的Jetty服务器来启动AppFuse,打开浏览器访问"http://localhost:8080 ",使用"admin:admin"登陆。
经过一天的折腾,总算把AppFuse请到了我们的硬盘上。其实步骤上说起来很简单:
接下来的路恐怕更为坚险曲折。但是,为了以后不再发明轮子(Don't Reinvent the Wheel),我们只有去发明一只够先进够耐用轮子。
题外话:第一次接触Maven,感觉像这东西像小叮当的口袋一样无所不能,像灭绝的恐龙一样巨大无比。终于可以理解为什么Configuration Manage也可以是一个独立的工种了。没有程序员会愿意去维护天书般的配置脚本,一大堆版本号,还有苍海桑田的开发环境-_-!