`
qianshangding
  • 浏览: 129134 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

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

分享到:
评论

相关推荐

    Maven构建和管理J2ee项目1

    【Maven构建和管理J2ee项目1】详解 Maven是一个强大的项目管理和构建工具,尤其在Java领域中被广泛使用。它可以帮助开发者自动化构建、依赖管理和项目信息管理,极大地提高了开发效率。本文将深入探讨如何使用Maven...

    j2ee项目maven管理开发图例

    Maven是一种项目管理和构建工具,能够帮助开发者自动化构建过程并管理项目的依赖。在J2EE项目中,合理地组织源代码对于项目的可维护性和扩展性至关重要。 **1.1 Java源代码目录结构** 按照规范,开发的所有程序...

    maven+j2ee+nexus的搭建

    "Maven2+Eclipse开发J2EE.pdf"这份文档可能详细介绍了如何在Eclipse中设置和使用Maven进行J2EE项目的开发,包括创建Maven Web项目,配置pom.xml文件,以及使用Maven命令进行构建。而"Nexus搭建Maven私服.pdf"则可能...

    简单的j2ee项目

    6. **Maven或Gradle**:现代J2EE项目可能使用构建工具,如Maven或Gradle,来管理依赖和构建流程。 7. **JNDI(Java Naming and Directory Interface)**:在J2EE中,JNDI用于查找和绑定资源,如数据源、邮件会话等...

    eclipse+jboss+maven+j2ee = demo

    标题 "eclipse+jboss+maven+j2ee = demo" 暗示了这是一个关于使用Eclipse集成开发环境、JBoss应用服务器、Maven构建工具以及J2EE(Java 2 Platform, Enterprise Edition)框架来创建一个示例项目的教程。在这个项目...

    j2ee项目开发案例

    9. **Maven或Gradle**:这些构建工具可以帮助开发者自动化构建过程,包括编译、测试、打包和部署J2EE项目。它们管理依赖关系,使得项目构建更加高效。 10. **容器与服务器**:J2EE应用通常运行在应用服务器上,如...

    集成jetty的j2ee项目demo

    - 在J2EE项目中集成Jetty,通常需要添加Jetty的依赖库到项目的类路径中,这可以通过Maven或Gradle等构建工具完成。 - 配置服务器启动脚本或初始化代码,以便在运行时加载并启动Jetty,处理Servlet和过滤器。 3. *...

    Maven构建struts2最简单例子

    在这个"使用Maven构建Struts2最简单例子"中,我们将探讨如何结合这两个工具来创建一个基础的J2EE应用。 首先,让我们深入了解Maven。Maven使用一个称为POM(Project Object Model)的XML文件来定义项目的配置信息,...

    j2ee项目模块化开发

    在J2EE项目中,Maven可以用于创建项目模块,定义依赖关系,构建和打包应用。在描述中提到,首先需要创建一个Maven项目组,删除不必要的文件,只保留pom.xml,这是Maven项目的配置文件,用来管理项目的构建、报告和...

    Maven2+Eclipse开发J2EE

    **m2eclipse**:这是一个强大的Maven集成插件,使Eclipse能够理解Maven项目,并在IDE内部提供Maven构建、依赖管理和项目配置等功能。m2eclipse极大地提升了开发效率,让开发者能够专注于代码编写而非构建细节。 ###...

    基于SSH的J2EE项目网上书城

    此外,项目可能还包括了构建文件(如Maven的pom.xml或Gradle的build.gradle),用于自动化构建和依赖管理。开发者可以通过这些文件设置构建过程,比如编译、测试、打包和部署。 总的来说,“基于SSH的J2EE项目网上...

    how to create a j2ee with maven

    总的来说,通过Maven创建J2EE项目,我们可以充分利用其强大的依赖管理和构建功能,简化项目构建流程,提高开发效率。同时,Maven的插件体系也使得集成各种工具和自动化任务变得轻松,进一步提升了开发体验。结合源码...

    软件测试技术在J2EE项目中的应用

    此外,Apache Maven或Gradle等构建工具也能帮助自动化测试过程。 3. **系统测试**:这一阶段涉及到整个J2EE应用的全面测试,包括Web层、业务逻辑层和数据库层。EJB(Enterprise JavaBeans)测试框架如Arquillian...

    template:Maven多模块构建J2ee项目

    各个子模块的功能: test-core:所有业务的核心业务逻辑。 test-ad:广告的业务流程 test-res:资源的业务流程 ...采用这种方式搭建项目,架构清晰,调用层次分明,并且方便对日后项目的水平拆分和垂直拆分。

    J2EE复习积累(五)-Maven3.0.5(二)-简单项目练习

    通过以上介绍,我们可以看出Maven 3.0.5在J2EE开发中的重要作用,它使得项目构建更加标准化和自动化,降低了开发者的维护成本。在实际开发中,结合源码和工具使用,可以更高效地管理项目及其依赖,提高开发效率。

    使用 AppFuse 快速构建 J2EE 应用

    6. **Maven 支持**:基于 Maven 构建,使得项目依赖管理和构建过程标准化,易于团队协作。 7. **持续集成友好**:与 Jenkins、Git 等持续集成工具无缝集成,便于自动化部署和版本控制。 8. **文档齐全**:AppFuse ...

    j2ee maven 结合gulp构建工具构建 war 自动刷新浏览器缓存

    本主题聚焦于“j2ee maven 结合gulp构建工具构建 war 自动刷新浏览器缓存”,我们将深入探讨这个话题。 首先,J2EE(Java 2 Platform, Enterprise Edition)是Java平台的企业版,它为开发和部署分布式企业级应用...

    基于SPRING构建J2EE框架

    总的来说,基于Spring构建J2EE框架涉及到的技术面广且深入,从基础的项目构建、开发环境配置到复杂的权限控制和分布式会话管理,都需要开发者有扎实的理论基础和实践经验。理解并掌握这些知识点,才能构建出高效、...

    J2EE项目系列(四)-SSM框架构建积分系统和基本商品检索系统(Spring+SpringMVC+MyBatis+Lucene+Redis+MAVEN).zip

    J2EE项目系列(四)-SSM框架构建积分系统和基本商品检索系统(Spring+SpringMVC+MyBatis+Lucene+Redis+MAVEN)喜欢就给个star吧!!!谢谢!并附一系列的博客文章(一)项目框架整合构建(二)搭建商品数据库和...

    j2ee实例 j2ee实例j2ee实例

    你将学习如何使用这些工具进行开发,以及如何使用Maven或Gradle等构建工具来管理和构建项目。 综上所述,J2EE实例涵盖了企业级开发的多个方面,包括组件模型、分层架构、分布式计算、消息传递、资源管理和安全性。...

Global site tag (gtag.js) - Google Analytics