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

1,安装Maven

Maven安装非常easy。

首先下载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模式,依照上面创建的project。MVC模式怎样体现呢?最经常使用的方式就是通过package来分开层与层之间的关系。比方:com.company.test.web。com.company.test.service,com.company.test.dao。

总体结构例如以下:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

上面的做法事实上没有什么不好,在小型系统中该结构是非常合理的,特别是代码规划的非常好。结构非常清晰的同学。整理的项目结构看起来还是非常清晰的。

採用标准的mvc模式。事实上MVC 是说明前端,业务逻辑还有数据层的分离。然而业务逻辑是一个系统中最复杂的地方,并非一个service 就能搞定。

比如:要考虑系统不断壮大,业务逻辑越来越复杂,訪问量越来越大。某些业务并发越来越高,这样项目就要拆分,不但要垂直拆分还要水平拆分。

以下介绍下,比較好的做法。

构建多层次项目

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

业务划分

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

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

构建多层次项目

Maven能够针对项目,构建结构复杂的多个子项目(这个事实上在非常多开源框架都就能看到)。因为上面业务已经划分好,创建过程例如以下:

创建主project:

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:generate -DarchetypeCatalog=internal
//不加參数-DarchetypeCatalog=internal会导致执行mvn archetype:generate非常慢




运行了上面的命令后,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内部的业务逻辑能够相互调用。

不能跨层次调用。

这样做。以后业务发起来,訪问量。并发越来越大或者业务越来越复杂,所以考虑拆分系统,以上面的项目模型,我们能够非常easy的拆分系统。

针对各个层次各个子系统做有针对性的拆分。

以下举几个系统拆分的样例:

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

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

  1. 使用Maven构建RichFaces 4.x项目

    使用Maven构建RichFaces 4.x项目 目录 开始之前 第一步 - 创建Maven项目 第二布 - 添加依赖文件 第三步 - 配置RichFaces 第四步 - 创建显示页面 开始之前 本文 ...

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

    前边,我刚搭建了Maven环境,还有给大家推荐了学习资源,这个小节,我们来就来,,简单的玩玩maven. 1.所需工具: 1.Eclipse     2.apache-maven-3.3.9   3. ...

  3. 基于Maven构建的Spring+Mybatis项目

    项目的目录结构: 1.基于Maven构建Web项目 参考:基于Maven构建Web项目 2.导入项目依赖 Spring 核心容器(Beans.Core.Context.Context support. ...

  4. 使用Maven构建和测试Java项目

    我们在创建项目时要学习的是如何使用 Maven 来创建一个 Java 应用程序.现在将学习如何构建和测试应用程序. 进入到 C:\MVN 目录我们准备创建来 java应用程序.打开 consumerB ...

  5. 使用maven构建基本的web项目结构

    由于当前公司在组织进行项目基本结构的整理,将以前通过eclipse/ ant 方式构建的项目向maven上迁移,于是便进行maven项目方面的调研. 对于maven项目,基本的结构已经在标准文件中: ...

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

    这篇文章.主要是技术上的整理,用来mark一下,用的时候參考. 一.新建项目 新建一个空的Maven Project项目 二.放入依赖 注:ear部署时假设里面有entity,会错误发生.所以不要把e ...

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

    折腾了一段时间终于解决了, 可能是因为网络问题 xml一直没法访问 maven 骨架生成项目速度慢的令人发指,都在Generating project in Batch mode等待,Idea状态显示 ...

  8. 图文详解 IntelliJ IDEA 15 创建 Maven 构建的 Java Web 项目(使用 Jetty 容器)

    图文详解 IntelliJ IDEA 15 创建 maven 的 Web 项目 搭建 maven 项目结构 1.使用 IntelliJ IDEA 15 新建一个项目.  2.设置 GAV 坐标  3. ...

  9. IDEA+MAVEN构建一个webapp骨架项目(解决一直卡在downloading plugins for问题)

    下载:链接:https://pan.baidu.com/s/1jJx73H8 密码:nud0 第一步   我在上面链接下载了这个骨架xml,放进本地(你的目录默认.m2)\repository\org ...

随机推荐

  1. 一个“”字引发的痛苦经历

    (一篇老文章,还有点价值,特意整理了一下.由于涉及客户项目,已经进行了脱敏处理) 1 写在前面的话 虽然这个问题是有解决方案的,但我不建议大家提供给客户,理由见此. 2 问题描述 2010.10.12 ...

  2. [深度学习]实现一个博弈型的AI,从五子棋开始(2)

    嗯,今天接着来搞五子棋,从五子棋开始给小伙伴们聊AI. 昨天晚上我们已经实现了一个五子棋的逻辑部分,其实讲道理,有个规则在,可以开始搞AI了,但是考虑到不够直观,我们还是顺带先把五子棋的UI也先搞出来 ...

  3. iOS开发针对对Masonry下的FPS优化讨论

    今天博客的内容就系统的讨论一下Masonry对FSP的影响,以及如何更好的使用Masonry.如果你对iOS开发足够熟悉的话,那么对Masonry框架应该不陌生.简单的说,Masonry的诞生让Aut ...

  4. C#删除区域实现透明

    最近在搞一个图形图像的项目.不知道经理为什么选择了C#语言,但还是要做,呵呵. 在期间出现一个比较难解决的问题如下: 删除当前图层的指定区域用来显示下面图层在这个区域的图像,相当于PS蒙版层的效果. ...

  5. 谈谈我的移动端rem适配方案

    最近有点怀疑人生,毕竟一个人写前端,有时候会怀疑自己理解的一些东西包括用法有没有符合标准.趁着这阵子闲下来,翻了翻别人的rem适配博客,发现有点绕口,怪自己是个强迫症,啥都要自己去试试结果并从中理解, ...

  6. 浅谈Android中的组播(多播)

    组播使用UDP对一定范围内的地址发送相同的一组Packet,即一次可以向多个接受者发出信息,其与单播的主要区别是地址的形式.IP协议分配了一定范围的地址空间给多播(多播只能使用这个范围内的IP),IP ...

  7. JavaScript学习笔记(八)——变量的作用域与解构赋值

    在学习廖雪峰前辈的JavaScript教程中,遇到了一些需要注意的点,因此作为学习笔记列出来,提醒自己注意! 如果大家有需要,欢迎访问前辈的博客https://www.liaoxuefeng.com/ ...

  8. 在网页标题栏title加入图标?

    方法一:制作一个ico格式的图片,将图片命名为favicon.ico,像素大小为16*16,所使用的颜色不得超过16色,然后再把favicon.ico放到网站的根目录下就行了.这样的话浏览器会不停的搜 ...

  9. Unity3D游戏GC优化总结---protobuf-net无GC版本优化实践

    protobuf-net优化效果图 protobuf-net是Unity3D游戏开发中被广泛使用的Google Protocol Buffer库的c#版本,之所以c#版本被广泛使用,是因为c++版本的 ...

  10. springboot-mybatis 批量insert

    springboot mybatis 批量insert 操作 直接上代码: 1.首先要在pom.xml中导入包: 略...... 2.springboot mybatis配置: package com ...