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

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

时间: 2024-10-12 20:28:29

Maven构建真正的J2EE项目的相关文章

使用Maven构建和部署J2EE应用程序的EAR文件

这篇文章,主要是技术上的整理,用来mark一下,用的时候参考. 一.新建项目 新建一个空的Maven Project项目 二.放入依赖 注:ear部署时如果里面有entity,会发生错误,所以不要把entity放到依赖项中,部署的时候先部实体,然后再部ear. 将需要打入EAR中的jar.war以dependencies-dependency的形式写到pom.xml文件中,如: 三.配置加载顺序 现在打出来的ear包中的application中只有war的配置信息,而没有jar的配置信息,而我们

三、使用Maven构建简单的java项目

前边,我刚搭建了Maven环境,还有给大家推荐了学习资源,这个小节,我们来就来,,简单的玩玩maven. 1.所需工具: 1.Eclipse     2.apache-maven-3.3.9   3.JDK  1.7 2.命令构建简单的java项目 (1)运行cmd 切换盘符到你指定的文件夹下,如图 (2)键入以下命令: mvn archetype:generate -DgroupId=com.software.wg -DartifactId=FirstMvn -DarchetypeArtifa

(从零开始java开发) IDEA+MAVEN构建一个webapp骨架项目(解决一直downloading问题)

折腾了一段时间终于解决了, 可能是因为网络问题 xml一直没法访问 maven 骨架生成项目速度慢的令人发指,都在Generating project in Batch mode等待,Idea状态显示栏还在不行runing,并没有卡死.查看debug信息发现,是maven获取archetype-catalog.xml导致.(用游览器打开http://repo1.maven.org/maven2/archetype-catalog.xml,需要等待很长时间才能获取到.) xml下载不了于是 第一步

使用Maven构建多模块企业项目

首先,前面几次学习已经学会了安装maven,如何创建maven项目等,最近的学习,终于有点进展了,搭建一下企业级多模块项目. 好了,废话不多说,具体如下: 首先新建一个maven项目,pom.xml的文件如下: 1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 2 xsi:schemaLocatio

使用maven构建第一个web项目

在eclipse中,正常创建maven项目后,发现在index.jsp中会报错,此时在pom.xml中加入如下依赖关系即可 1 <dependency> 2 <groupId>javax.servlet</groupId> 3 <artifactId>javax.servlet-api</artifactId> 4 <version>3.0.1</version> 5 <!-- 只在编译和测试时运行 --> 6

Maven的学习资料收集--(四)使用Maven构建Web项目-测试

2014-08-04 23:21 2人阅读 评论(0) 收藏 编辑 删除 目录(?)[+] [-] 在srcmainjava下新建一个Servlet 修改webxml 新建JSP 测试 在上一篇博客里,我们使用Maven构建了一个Web项目,我们在这里写一个简单的Servlet,测试一下. 1.在src/main/java下,新建一个Servlet [java] view plaincopyprint? <span style="font-weight: normal;">

Maven的学习资料收集--(三)使用Maven构建Web项目

新建Maven项目 File - New - Other 选择Maven Project 单击Next 保持默认即可单击Next 选择Archetype为 web app单击Next 输入一些必要信息单击Finish 项目结构如下图 配置项目 在项目上右键单击添加Source Folder 修改Build Path 配置 将项目转换为Dynamic Web Project 设置部署程序集Web Deployment Assembly 从网上查了一些资料,才算明白(也就是怎么操作吧),怎么使用Ma

Maven学习(三)- 使用Maven构建Web项目

从网上查了一些资料,才算明白(也就是怎么操作吧),怎么使用Maven构建一个Web项目,找到一篇文档,主要都是从这里学到的: 下载地址:使用Eclipse构建Maven的Web项目.docx 现自己在重新操作一下:(使用的是Eclipse JavaEE版 ps:eclipse-jee-indigo-SR1-win32,已经安装好了m2eclipse插件) 1.新建Maven项目 1.1 File -> New -> Other 1.2 选择Maven Project ,单击Next 1.3 保

Eclipse中使用Maven创建Servlet3.0 Web 项目

摘要 Apache Maven是一个优秀的项目构建和管理工具,许多开源项目都使用Maven进行构建.由于最近工作中要用到Maven,于是这里记录下在Eclipse中使用Maven插件创建一个基于Servlet3.0的Java Web项目的过程,欢迎大家指正. Apache Maven是一个优秀的项目构建和管理工具,许多开源项目都使用Maven进行构建.由于最近工作中要用到Maven,于是这里记录下在Eclipse中使用Maven插件创建一个基于Servlet3.0的Java Web项目的过程,欢