City of Dream

实践出真知

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  2 随笔 :: 1 文章 :: 35 评论 :: 0 Trackbacks

2008年2月29日 #

     摘要:   阅读全文
posted @ 2008-09-19 22:55 萧少英 阅读(3611) | 评论 (29)编辑 收藏

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
posted @ 2008-02-29 12:53 萧少英 阅读(4235) | 评论 (6)编辑 收藏