`
SSailYang
  • 浏览: 309204 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

使用 Maven 管理 Seam 项目

阅读更多

在学会用 Maven 之后,有一种要将所有项目都使用 Maven 管理的冲动,当然 Seam 项目也不例外。之前曾花过一天的时间,尝试将使用 EJB 的 Seam 项目使用 Maven 进行管理。结果很不理想,虽然理论上可行,但是项目结构过于复杂。除了要建立根项目外,还要在根项目下建立3个模块:分别是 EAR 模块、EJB 模块和 WAR 模块,而且在部署的时候老出错。没办法,使用 EJB 的 Seam 项目的包依赖关系太复杂了,而且 JBoss 使用起来也比 Tomcat 麻烦。同时,Maven 的 POM 文件写起来也很麻烦。所以,最后还是放弃了这个念头。

 

        在那次不成功的尝试之后,我曾反思了一下。其实,对于使用了 EJB 的 Seam 项目而言,完全使用 Maven 并不是一个太好的选择。比较实际的做法是使用 Maven 管理依赖的类库,构建和部署则使用 Ant 来完成。不过,我的这个想法并没有实现。

 

        最近,在看 Java EE 领域技术新变化的相关文章的时候,我发现自己犯了一个比较根本的问题,为什么 Seam 的项目一定要和 EJB 扯上关系。虽然 Seam 的一个最主要,也是最大的贡献就是很完美地将 JSF 和 EJB3 结合了在一起,但这并不意味着 Seam 项目就一定要用 EJB3 (这个问题其他人可能都看明白了,只有我比较愚钝)。其实 Seam 为 POJO 提供了很多 EJB3 的特性,这里我就不一一列举了,文档和《Seam in Action》那本书里都有。对于是否使用 EJB 这个问题,我的观点是先要了解 EJB 都能提供哪些 POJO 不能提供的特性,除非非常必要,否则不要使用 EJB。

 

       仔细看看 Seam 提供的例子,有哪些非得要用 EJB3(对于这个问题,欢迎大家讨论)。至少 Booking 那个不用吧,Seam 里的那个 Hibernate 例子也使用了去掉 EJB 的 Booking 例子。

 

       不过,在 Java EE 6 推出之后,使用 EJB 将变得更加简单。具体内容可以看我另一篇文章:《EJB 3.1 会给我们带来什么 》呵呵

 

       说了这么多,该说正题了。去掉 EJB 的 Seam 项目很容易用 Maven 管理,不就是一个 WAR 项目嘛。DZone 上有一篇关于 Seam 与 Maven 的文章。不过这篇文章里提到的例子太简单,所以我自己拿 Seam 里的那个 Hibernate 例子为基础,试着用 Maven 管理。实际上很简单,基本上就是配置类库就行了。但是如果不做的话也不知道是简还是繁,毕竟有些东西实际做了才会发现。

 

       具体内容没什么太多值得说的,我直接把代码放上来好了。

分享到:
评论
9 楼 yawei 2010-10-29  
you are gonna like this

Seam, EJB's and EAR-packaging in Maven

http://kasper.eobjects.org/2009/04/seam-ejbs-and-ear-packaging-in-maven.html
8 楼 zhmore 2010-10-26  
最近学习maven,可以用它来搭建简单结构为"jar+ejb+war"的项目,最终打包为ear,最终把打包的ear发布到jboss上。当然也可以在jetty上运行(这个在开发阶段比较实用)。基本流程已经跑通。感觉呢,maven这个东西确实比较强大,但是学习成本太高,java的东西就是这个鸟样,虽然强大,但很繁琐,简单的东西非得搞复杂。
7 楼 joy9858 2010-08-27  
最近在研究maven,但是就不知道怎么将项目打成ear包,提供给jboss用
6 楼 dearshor 2009-01-03  
5 楼 SSailYang 2008-12-29  
atusoft 写道

maven确实比较烦,不如ant直观

直观?此话何意?

各有所长。
4 楼 atusoft 2008-12-25  
maven确实比较烦,不如ant直观
3 楼 SSailYang 2008-12-13  
根据软件规模的大小而将软件划分为多个模块,同时使用 Maven 进行管理。这一点我是同意的,这也是 Maven 的优势所在。软件的项目结构复杂与否只是相对而言。我的意思只是说对于 Seam 中 Booking 这个例子,如果在使用 EJB 的情况下,使用 Maven 管理项目显得有点麻烦,并不是说分为三个模块就一定是一个复杂的结构。

这篇文章其实有抛砖引玉的作用。我在使用 Maven 管理 EAR 项目时有点问题,通过这篇文章交流一下也能学到更多的东西。
2 楼 dearshor 2008-12-12  
引用
在学会用 Maven 之后,有一种要将所有项目都使用 Maven 管理的冲动,当然 Seam 项目也不例外。之前曾花过一天的时间,尝试将使用 EJB 的 Seam 项目使用 Maven 进行管理。结果很不理想,虽然理论上可行,但是项目结构过于复杂。除了要建立根项目外,还要在根项目下建立3个模块:分别是 EAR 模块、EJB 模块和 WAR 模块,

恕我直言,你说你已经“学会用 Maven”了,我说你还没真正会用,还没真正明白maven到底能带给你什么。

就因为“还要在根项目下建立3个模块”,你就认为“项目结构过于复杂”啦?我问你,为什么要用maven?如果你说仅仅是为了解决依赖管理问题,那用ant+ivy一样可以实现,用不着maven。你下面还提到
引用
比较实际的做法是使用 Maven 管理依赖的类库,构建和部署则使用 Ant 来完成。

那正好啊,全部用ant不就得了吗?为什么还搞个maven来自找麻烦?

maven不仅限于一个build tool,而是一个软件工程管理工具,它所能做的,覆盖到了软件工程的各个生命周期。这是maven和ant的本质区别,它们不是一个级别上的东西,没有可比性。

就你这里的问题来说,使用maven除了解决依赖管理问题(第三方artifact),还能解决你自己的project的模块化的问题。为什么要模块化?如果你只是做做小project,通常都是单兵作战的话,那是没这个必要(这样的话,你也完全没必要使用标准的Java EE 5 packaging,分什么war module,ejb module,最后打成EAR package。一个war package全部能搞定了)。

反之,如果你的这个project比较大,参与协同开发的人很多,并且是多人,甚至多个team同时开工的,这个时候你还能一个war全部搞定?不乱套才怪!!这个时候就需要把你的project尽可能的模块化,模块化才是maven的核型理念之一!!你想过你开发的这个模块,也完全可以作为第三方artifact(已经build好了的,并经过足够的test的稳定版本,而不仅仅是一堆没有兼容性保证的源代码)提供给其他team或你team里的其他人用吗?这个就是maven的魅力之一。maven适合于团队协作开发,团队越大,受益越大;单兵作战不需要maven!

是否使用EJB,那是你的自由,要根据你的project需要而定。所以你说
引用
为什么 Seam 的项目一定要和 EJB 扯上关系。

这我没意见。

但你说
引用
而且在部署的时候老出错。没办法,使用 EJB 的 Seam 项目的包依赖关系太复杂了,

我严重不同意!你知道maven dependency tree里的transitive artifact的概念吗?A依赖于B,B依赖于C,你只要把B加入A的dependencies里,自然就把C也加入到A的dependency tree里了。明白了吗?你只要添加直接依赖即可。这样还觉得复杂吗?

最后给你提供一些maven相关的资源吧:
  • 我将seam分发包里的DVDStore example改成了基于maven的project,使用了ejb,供你参考,你看看到底难不难:
  • project url:http://code.google.com/p/keepleaping/source/browse/#svn/trunk/seam/JbossSeamSamples/dvdstore
  • svn repo url:http://keepleaping.googlecode.com/svn/trunk/seam/JbossSeamSamples/dvdstore/


  • maven中文社区:http://groups.google.com/group/maven-zh
1 楼 wetouns 2008-12-11  
自己构建一个带EJB的SEAM项目实在是太难了,活受罪呀,不过做出一个archetype来以后复用就没这么痛苦

相关推荐

Global site tag (gtag.js) - Google Analytics