MyException - 我的异常网
当前位置:我的异常网» J2EE » Maven构建真个的J2EE项目

Maven构建真个的J2EE项目

www.MyException.Cn  网友分享于:2015-08-22  浏览:0次
Maven构建真正的J2EE项目

今天同事问起我目前用Maven构建的多模块项目架构和以前用Eclipse创建的Web项目的问题,下面将讲一下使用maven搭建多模块的J2ee项目,以及采用这种方式搭建项目对日后项目的水平拆分和垂直拆分的好处,最后会给一个示例项目供大家下载。

1,安装Maven

Maven安装很简单。

首先下载Maven,下载地址:http://maven.apache.org/download.cgi

然后解压后安装包。

最后配置环境变量。首先前提条件是装了Java环境。


二,Maven构建J2ee项目

单web项目

mvn archetype:create -DgroupId=com.company.test -DartifactId=my-test -DarchetypeArtifactId=maven-archetype-webapp
执行上面命令创建一个web项目,项目名称为my-test。很多人就这样开始使用了。

通常我们做web项目,都采用经典的MVC模式,按照上面创建的工程,MVC模式如何体现呢?最常用的方式就是通过package来分开层与层之间的关系。比如:com.company.test.web,com.company.test.service,com.company.test.dao。

整体结构如下:


上面的做法其实没有什么不好,在小型系统中该结构是很合理的,特别是代码规划的很好,结构很清晰的同学,整理的项目结构看起来还是很清晰的。采用标准的mvc模式。其实MVC 是说明前端,业务逻辑还有数据层的分离。然而业务逻辑是一个系统中最复杂的地方,并不是一个service 就能搞定。例如:要考虑系统不断壮大,业务逻辑越来越复杂,访问量越来越大,某些业务并发越来越高,这样项目就要拆分,不但要垂直拆分还要水平拆分。下面介绍下,比较好的做法。


构建多层次项目

例如一个视频网站,其业务可能包含用户管理,终端管理,点播管理,直播管理,广告投放,点播搜索,点播展示等等。由于开始整个网站比较小,访问量也比较低。所以开始搭建站点的时候没有必要搞的那么复杂,例如:读写分离,缓存,集群,分布式,数据库分片等。第一是前期没有必要那么去做;第二也没必要花那么大的成本;第三前期人员紧张搞大了不利于快速的响应需求。一切从实际出发,下面主要讨论如何合理的通过Maven构建项目。

业务划分

针对业务划分的话,这个视频网站可以划分为:用户,终端,资源(点播或直播),广告。他们相互之间会有交叉,比如,用户涉及到终端,广告涉及到资源等等的关系。

所以项目中最好把他们分成独立的子系统。例如分片叫做:test-user;test-terminal;test-res;test-ad。

构建多层次项目

Maven可以针对项目,构建结构复杂的多个子项目(这个其实在很多开源框架都就能看到)。由于上面业务已经划分好,创建步骤如下:

创建主工程:

D:\>mvn archetype:create -DgroupId=com.company.test -DartifactId=test-video
执行完成后,会在D潘根目录生成一个test-video的目录,打开test-video目录,删除里面的src目录,在编辑pom.xml文件,把

<packaging>jar</packaging>
改为
<packaging>pom</packaging>

接着进入test-video目录,继续创建子项目:

D:\>cd test-video
D:\test-video>mvn archetype:create -DgroupId=com.company.test -DartifactId=test-core
D:\test-video>mvn archetype:create -DgroupId=com.company.test -DartifactId=test-user
D:\test-video>mvn archetype:create -DgroupId=com.company.test -DartifactId=test-res
D:\test-video>mvn archetype:create -DgroupId=com.company.test -DartifactId=test-terminal
D:\test-video>mvn archetype:create -DgroupId=com.company.test -DartifactId=test-ad
D:\test-video>mvn archetype:create -DgroupId=com.company.test -DartifactId=test-dao
D:\test-video>mvn archetype:create -DgroupId=com.company.test -DartifactId=test-web -DarchetypeArtifactId=maven-archetype-webapp





执行了上面的命令后,test-video文件夹会生成:test-core;test-ad;test-dao;test-res;test-terminal;test-user;test-web文件夹,并且在test-video目录下的pom.xml文件会增加如下内容:

  <modules>
    <module>test-core</module>
    <module>test-user</module>
    <module>test-res</module>
    <module>test-terminal</module>
    <module>test-ad</module>
    <module>test-dao</module>
    <module>test-web</module>
  </modules>

各个子模块的功能:

test-core:所有业务的核心业务逻辑。

test-ad:广告的业务流程

test-res:资源的业务流程

test-terminal:终端的业务流程

test-user:用户的业务流程

test-web:整个项目的web前端操作

test-dao:整个项目的数据层

这样的话,一个简单的项目就创建了,一般我们用eclipse创建的web项目,也仅仅能叫web项目,如上述创建的项目,才是真真的J2ee项目。

项目创建完之后,最主要理解的是业务流程和业务逻辑的区别,core是负责具体的业务逻辑处理,如test-user中主要负责各种业务逻辑调用的流程。调用关系如下:

core中是一个个最基本的业务单元,可复用。在业务流程中可以复用core里面的操作。但是业务流程间不可服用。

test-user,test-ad,test-res,test-terminal之间不能调用,test-core内部的业务逻辑可以相互调用。

不能跨层次调用。


这样做,以后业务发起来,访问量,并发越来越大或者业务越来越复杂,所以考虑拆分系统,以上面的项目模型,我们可以很容易的拆分系统。针对各个层次各个子系统做有针对性的拆分。

下面举几个系统拆分的例子:

1,一般情况下Core层压力会比较大,我们将Core子系统集群部署,缓解压力,DAO层也单独部署,每个业务块连接不同的DB,Core和DAO如果独立部署就涉及到一个远程部署调用的问题,也就是test-user,test-ad,test-res,test-terminal调用test-core的问题,和test-core调用test-dao的问题。我用的是Dubbo,以SOA服务化的方式给外部提供调用。这样的拆分改动会很小。


2,系统拆分,或者叫垂直拆分


3,拆分后的系统依然无法满足需求,那就继续拆分,那层压力大就扩展那层。

以上这些拆分,举的例子都是某一层的扩展,其实各个层级都可以扩充,但是扩充和拆分的同时会涉及到统一session,数据库读写分离,集群,分布式等等问题,这里就不一一细说了。

当然项目结构上也不一定像我上面讲的那样去构建,要根据自身的业务,技术架构,开发团队等等条件来划分。


2.2.3 导入到Eclipse

最后倒入项目到Eclipse

多模块项目框架下载地址:

GitHub地址:https://github.com/qianshangding/template

版权声明:本文为博主原创文章,未经博主允许不得转载。

文章评论

 程序员的样子
程序员的样子
2013年中国软件开发者薪资调查报告
2013年中国软件开发者薪资调查报告
程序员周末都喜欢做什么?
程序员周末都喜欢做什么?
十大编程算法助程序员走上高手之路
十大编程算法助程序员走上高手之路
代码女神横空出世
代码女神横空出世
鲜为人知的编程真相
鲜为人知的编程真相
漫画:程序员的工作
漫画:程序员的工作
做程序猿的老婆应该注意的一些事情
做程序猿的老婆应该注意的一些事情
60个开发者不容错过的免费资源库
60个开发者不容错过的免费资源库
科技史上最臭名昭著的13大罪犯
科技史上最臭名昭著的13大罪犯
那些争议最大的编程观点
那些争议最大的编程观点
程序员必看的十大电影
程序员必看的十大电影
总结2014中国互联网十大段子
总结2014中国互联网十大段子
亲爱的项目经理,我恨你
亲爱的项目经理,我恨你
我是如何打败拖延症的
我是如何打败拖延症的
程序员眼里IE浏览器是什么样的
程序员眼里IE浏览器是什么样的
为什么程序员都是夜猫子
为什么程序员都是夜猫子
当下全球最炙手可热的八位少年创业者
当下全球最炙手可热的八位少年创业者
什么才是优秀的用户界面设计
什么才是优秀的用户界面设计
10个帮程序员减压放松的网站
10个帮程序员减压放松的网站
聊聊HTTPS和SSL/TLS协议
聊聊HTTPS和SSL/TLS协议
写给自己也写给你 自己到底该何去何从
写给自己也写给你 自己到底该何去何从
我跳槽是因为他们的显示器更大
我跳槽是因为他们的显示器更大
Web开发者需具备的8个好习惯
Web开发者需具备的8个好习惯
不懂技术不要对懂技术的人说这很容易实现
不懂技术不要对懂技术的人说这很容易实现
如何成为一名黑客
如何成为一名黑客
团队中“技术大拿”并非越多越好
团队中“技术大拿”并非越多越好
Java程序员必看电影
Java程序员必看电影
Web开发人员为什么越来越懒了?
Web开发人员为什么越来越懒了?
为啥Android手机总会越用越慢?
为啥Android手机总会越用越慢?
每天工作4小时的程序员
每天工作4小时的程序员
中美印日四国程序员比较
中美印日四国程序员比较
那些性感的让人尖叫的程序员
那些性感的让人尖叫的程序员
5款最佳正则表达式编辑调试器
5款最佳正则表达式编辑调试器
一个程序员的时间管理
一个程序员的时间管理
初级 vs 高级开发者 哪个性价比更高?
初级 vs 高级开发者 哪个性价比更高?
程序员都该阅读的书
程序员都该阅读的书
程序员和编码员之间的区别
程序员和编码员之间的区别
程序员的鄙视链
程序员的鄙视链
看13位CEO、创始人和高管如何提高工作效率
看13位CEO、创始人和高管如何提高工作效率
“肮脏的”IT工作排行榜
“肮脏的”IT工作排行榜
程序员应该关注的一些事儿
程序员应该关注的一些事儿
旅行,写作,编程
旅行,写作,编程
老程序员的下场
老程序员的下场
要嫁就嫁程序猿—钱多话少死的早
要嫁就嫁程序猿—钱多话少死的早
如何区分一个程序员是“老手“还是“新手“?
如何区分一个程序员是“老手“还是“新手“?
编程语言是女人
编程语言是女人
老美怎么看待阿里赴美上市
老美怎么看待阿里赴美上市
程序员的一天:一寸光阴一寸金
程序员的一天:一寸光阴一寸金
软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有