用maven搭建多模块企业级项目(步骤详细)

一 开发环境

Eclipse JavaEE IDE,版本代号:Mars.2Release (4.5.2)

apache-maven-3.3.9

JDK1.7

apache-tomcat-7.0.29。

二 分模块开发的好处

用Maven管理的比较大的项目大部分都是分模块的,每个模块都对应着一个pom.xml。它们之间通过继承和聚合相互关联。那么,为什么要这么做呢?我们明明在开发一个项目,划分模块后,导入Eclipse变成了N个项目,这样岂不带来复杂度,给开发带来不便?

为了解释原因,假设有这样一个项目,很常见的spring+spring mvc+mybatis整合开发的web应用。在这个应用中,我们分了几层:

1)    entity层即实体层,也即放置PO类还有跟PO类相关联的配置文件。

2)    Dao层负责数据库交互,封装了Hibernate交互的类。

3)    Service层处理业务逻辑,放一些Service接口和实现相关的Bean。

4)    Web层负责与客户端交互,主要有一些Structs的Action类。

对应的,在该项目中,我们会看到如下一些包名:

1)    com.mycom.com.entitys

2)    com.mycom.com.dao

3)    com.mycom.com.service

4)    com.mycom.com.web

这样整个项目的框架就清晰了,但随着项目的进行,你可能会遇到如下问题:

Ø  这个应用可能需要有一个前台和一个后台管理端,你发现大部分entitys,一些service,和大部分dao是在两个应用中可通用的。这样的问题,你一周内遇到了好几次。

Ø  pom.xml中的依赖列表越来越长,但是,由于目前只有一个项目(WAR),你不得不新建一个项目依赖这个WAR,这变得非常的恶心,因为在Maven中配置对WAR的依赖远不如依赖JAR那样简单明了,而且你根本不需要org.myorg.app.web。有人修改了dao,提交到svn并且不小心导致build失败了,你在编写service的代码,发现编译不过,只能等那人把dao修复了,你才能继续进行,很多人都在修改,到后来你根本就不清楚哪个依赖是谁需要的,渐渐的,很多不必要的依赖被引入。甚至出现了一个依赖有多个版本存在。

Ø  build整个项目的时间越来越长,尽管你只是一直在web层工作,但你不得不build整个项目。

Ø  某个模块,比如dao,你只想让一些经验丰富的人来维护,可是,现在这种情况,每个开发者都能修改,这导致关键模块的代码质量不能达到你的要求。

我们会发现,其实这里实际上没有遵守一个设计模式原则:“高内聚,低耦合”。虽然我们通过包名划分了层次,并且你还会说,这些包的依赖都是单向的,没有包的环依赖。这很好,但还不够,因为就构建层次来说,所有东西都被耦合在一起了。因此我们需要使用Maven划分模块。

三  分模块开发步骤

下面我们以一个已经开发好的spring+spring mvc+mybatis的项目为例,我们把它拆解成4个模块SMMvc-entitys,SMMvc-dao,SMMvc-service,SMMvc-web。模块间的依赖关系如下图所示:

开发步骤:

(1) 创建parent模块。在package explorer里面单击右键—》new--->other…----->Maven------>maven project,如下图

点击next,出现下图

点击next,出现工程配置界面,如图

在Artifact Id里面填写模块名称SMMvc-parent,在Packaging里面选择pom。点击完成,pom.xml的配置如图所示:

然后把原来项目的jar包依赖配置拷贝过来,如图所示:

接下来,在SMMvc-parent工程上单击右键,建立子模块,如图所示:

点击下一步,如图所示

在Module Name里面输入子模块名称SMMvc-entitys,点击下一步,如图所示:

这时候,在Packaging 栏里面选择jar,点击完成。完成之后,子模块SMMvc-entitys会自动继承父模块里面的包的依赖配置,拷贝实体层代码过来,如下图所示:

然后我们把子模块SMMvc-entitys打成jar包发布到本地仓库。在子模块SMMvc-entitys上单击右键==》run as==>maven build…  弹出如下界面:

在Goals中填写install,点击Run即可。不出意外,就会自动编译成jar包并自动发布到本地仓库,如图所示:

按照相同的步骤创建SMMvc-dao模块,如下图所示:

点击下一步,如下图

点击完成,然后拷贝dao层代码过来,如下图所示

发现大量报错,因为dao层要依赖实体层,接下里我们就来添加实体层的依赖。打开pom.xml文件,点击添加按钮,如图所示:

弹出对话框,输入entity,下面会自动出现需要依赖的jar包,这个jar包就是前面发布到本地仓库的jar包。

点击ok,这时pom.xml文件就会出现entity层的jar依赖,如图所示:

maven Dependencies里面就会有entity层的依赖,如图所示

这时候因为都是在同一级目录里面,所有会显示成一个文件夹形式,如果我们把SMMvc-entity项目关闭,它就会自动显示成jar包的形式。dao模块做完了之后也要打成jar包,发布到本地仓库。需要说明的是,我们可以把整个项目的配置文件都拷贝到dao子模块,因为还有service模块需要依赖dao模块,web模块依赖service模块,我们不用担心配置文件利用不上。当然你也可以分开编写每一层的配置文件。如图所示:

同样的道理,建立子模块SMMvc-service,如图所示:

这时候就不用在resource里面编写配置文件了,因为配置文件在dao模块,已经依赖进来了。接下来我们建立SMMvc-web模块,其它步骤省略,关键步骤如下图:

Packaging一定要选择war。完成之后会报错,那是因为没有web.xml。拷贝web层相关代码过来,包括web.xml,如图所示:

错误会立刻消失。最终父模块的结构如下图所示:

好了,大功告成,现在就可以启动tomcat运行了。注意,运行的是SMMvc-web子模块。

猜你喜欢

转载自blog.csdn.net/qq_36544760/article/details/81835209
今日推荐