java开发,maven多模块项目管理的喜与恼

谈到java开发的多模块组织,我不禁乐道于maven的强大与高效,以至于在上一年进行前端规范化工作时,还时不时地拿gulpmaven进行对比。

谈到maven就不能不谈ant,早些年代的java库管理多是ant方式,项目需要什么jar包,就往项目的lib文件夹下塞,包出现了冲突解决起来比较费劲。Maven的方式叫做反应池,在项目中只需要一个pom.xml文件就可以管理包的依赖关系,而且可以通过视图能清晰地看到层次依赖关系,便于包冲突的分析与解决。而依赖的jar包文件放在当前用户的.m2文件夹下,打包时,又自动把依赖包组织起来。

Maven除了优秀的库依赖管理与插件依赖管理(这里暂时不多介绍),还有一个优秀的特性——项目模块依赖管理——这使得一个大的项目可以任意拆分成多个相对独立的原子功能(可以是业务功能点也可以是工具类库)。在实际工作中,我通常把工具类库打包成jar,把组织级别的业务功能点打包成war作为微服务。

Maven-module多模块组织固然有如此大的优势,但刚开始过度的原子化分割,是的项目后期维护出现了一定的难度:

一、前期技术储备不足,在eclipse中使用时,每次更新jar模块后,都要maven install下,把jar模块安装到本地库里。但这个问题是,随着项目模块的增加,没修改几行代码就要执行次这个命令,很耗费时间。当然,后期找到了正规的解决方法,但偶尔出现的问题,还是使得团队成员退回install方式。

二、后期维护成本较大。模块过多而且依赖复杂的后果就是,牵一发而动全身。有的功能,管理后台依赖了,会员也依赖了,一次改动,如果测试补充分,很容易添加新的bug.

三、新的团队成员上手难。复杂的项目结构,无疑为新成员设定了很高的门槛,光分析一个业务逻辑就好跨越好几个jar

根据以上几点,我把全公司的项目模块归类为两大类。一个是组织级别的框架模块,一个是项目级别的项目模块。框架模块可以成为项目前期技术选型的素材,优秀的项目模块又可以完善框架模块。两者相辅相成,当然两个都是通过maven-module的形式进行管理。

在业务系统中,在单体模式(这个项目就是一个war)与之前过度分割的原子模式之间进行折中。把整个项目定义为一个pom项目(maven项目有三种类型pom/jar/war),进行项目依赖库与插件的版本控制;每个业务端(比如,管理后台、商家后台、会员中心等)作为war模块,每个war模块相对独立,如果出现业务交集,通过前端调用不同war的接口进行整合,每个war模块所依赖的库或者插件都从父级的pom项目中选定。

业务系统中引来的工具类,在项目阶段审核后提交到框架模块的工具包里统一管理。业务系统中可重用的服务(如:登陆、鉴权、工作流等),则在框架模块中进一步抽象成为微服务。

一个项目的完成,不仅仅是交活收钱,对于公司来说,更大的财产是组织过程资产的积淀。

java项目,基于maven的模块化开发与微服务架构

自从爱上maven的模块化开发,就不能自拔。

在实际项目中,代码复用是每个公司希望做的一项工作。但在初期,项目紧、任务重的情况下,如何兼顾代码复用(当然,就把复制代码算是最低级的代码复用吧,不过这可就做不到功能抽象的程度)与业务项目开发的确需要一定的构思。

对于单体项目(基本上所有的功能都在一个项目里,最后打包成一个jar或者war),可能规范命名空间(包名、类名),是个不错的选择。——把一个功能封装在一个命名空间里,提供仅有的几个public的API。代码复用以复制文件夹的形式重用,再好点就专门做成一个鱼龙混杂的“基础包”。

maven让你多了一个选择,可以把可重用的功能抽象到一个maven模块里(一般是个jar),在一个项目里积累的maven模块,在可以在项目收尾后进一步抽象为组织过程资产级别的模块。在其他项目里,只需要引入这个jar(maven的pom.xml方式或者ant方式)。

至于业务性质的功能模块(如支付功能,文件上传功能),可以开发为jar,然后被一个war类型的模块引入,一个微服务就出来了。。。。但然也可以根据业务需要,把几个业务jar封装到一个war模块里,一个传统的单体项目也就出来了。。。

当然maven-module模式的架构,需要对maven的应用有一定的了解。不过我相信,站在巨人的肩上,我们能看的更远!

蜗牛,为加班而生~

maven-module多模块依赖项目在eclipse中搭建与开发

一、Maven-module多模块依赖项目说明

Maven-module项目可以把较大的项目按照功能或者层次进行横向与纵向的模块化分割。项目结构是父项目子模块的结构进行组织。整个项目以pom型项目进行组织,其模块可以是jar项目,也可以是war项目,也可以pom项目。合理的使用maven-module项目,可以是项目结构分明,同时提高了代码的复用性。

二、Maven-module项目示例结构

本文以maven插件官方示例(具体地址请查看附录)为素材,进行了项目搭建、运行与打包。项目代码压缩包请查看附录。

Maven project structure

pom.xml          (top level pom with packaging pom)

my-api/pom.xml     (api project with packaging jar)

my-api-impl/pom.xml  (api implementation project with packaging jar)

my-webapp/pom.xml   (webapp project with packaging war)

三、Maven-module项目eclipse下使用tomcat启动

直接上图

继续阅读maven-module多模块依赖项目在eclipse中搭建与开发