谈谈maven多模块
记得在校的时候,通常用的比较多是动态web工程,动态web工程导入最多就是jar包,这些jar包需要自己手动复制粘贴放入lib目录下,然后build path,有的IDE会自动build path有的需要手动选中所有lib,然后build path。 后来工作了,用的最多的就是maven。maven简单的说,它就是项目构建工具,你需要什么依赖,就去maven库中搜索,然后找到你想要的依赖,将其复制到你的pom.xml文件中,注意用<dependencies></dependencies>将依赖进行包含。 ? 为什么用maven? 给我感触最深的就是之前用动态web工程构建项目,光导jar包就花了不少时间,我经常强调一句,jar包导对,你的项目基本成功了80%。这个项目指的是框架整合。如果导不对,错误都不好找。 而maven,只需将找到的依赖放入pom.xml文件中,就会自动去下载这些依赖,当然maven仓库最初是没有任何依赖。 我用的是eclipse 氧气版,自带maven插件,大家可以去Eclipse官网去下载 https://www.eclipse.org/downloads/? 另外idea也自带maven插件,虽然idea我几乎没用过,用的特别少,除了之前帮助一位朋友解决一些项目问题时,用过,其他时候用的最多的还是eclipse。 不说太多题外话,用maven最直接的原因就是不用为jar包发愁。 ? 还有为什么用maven? 让项目结构更清晰规范,而且还更易扩展,动态web构建项目,扩展太不易了,特别是针对电商,金融一些大型网站而言。 对于maven而言用多模块开发更好,比较符合解耦原则。 这个是我很久之前创建的一个maven项目,这里就不以动态web项目为例了。 这个maven项目并没有多模块,所以我从dao到service,乃至controller,或者以后加入redis或者集成第三方插件都要在这个项目下写。 对于个人开发而言,这倒影响不大,但是假设它是一个大规模后台系统,多人进行开发,全部都在这一个项目下开发,即便使用git等版本控制工具进行代码管理,使用git是为了让代码管理的更好,同时也是为了方便合并代码比对。 早期团队三四个开发一个项目还好,后来走了一部分人,来了几个新手,新手的话,对代码逻辑不是特别清楚,所以要一一细看,但是如果是如下所示: 一共11个包,每个包至少有十几二十个java类,但真实开发场景中,不只11个包,特别是对于一些大型系统而言,三四十个包,假设三四十个包全部混合在一个项目下,每个包下至少三十个java类,对于新手而言熟悉代码需要比较长的时间,这就增加了一定的成本。 说到这,maven多模块就可以解决这个问题,还是以我的博客为例: 下面是maven多模块构建项目: 总共五个项目,一个父工程,四个子工程。 父工程主要装载着主要的依赖文件 子工程分别有: blog-common:主要放公共复用的类,例如常用工具类等 blog-core:主要放入核心类,例如aop,shiro或者redis等,当然也包括项目的主要核心代码 blog-generator:代码生成器 blog-web:controller常用放置地,包含相关的配置文件,同时也可包含代码生成器生成的代码 目前只有这几个,但是大家试想,如果我要接入很多第三插件或者其他应用项目,我只需增加子工程即可 而且我研究过ibase4j,jeesite,guns等github上的开源项目,他们的项目构建大多如此。 比如ibase4j,它是将项目分成这样: 简单的说根据业务进行模块分层 根据业务模块分层也是maven构建多模块项目常用的做法之一。 从中也可以看出多模块真的符合解耦原则,常规的maven工程之所以不解耦是因为全部放置在一个工程里,非常不符合解耦。 代码耦合性重,只会增加开发成本,降低效率,多模块构建项目,让业务更加清晰,更加规范,非常有利于项目开发效率。 我最近公司项目就使用这个,同时我个人的blog项目也打算采用这种开发方式。 今天只是浅谈,一时灵感,让我忍不住想要分享。大家针对该随笔有更好的意见和想法,欢迎分享 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 【cocos2d-x游戏开发】坐标系详解
- 如何在不刷新页面MVC C#的情况下显示不同的值
- oracle – 有没有办法使用Hibernate的Criteria API对结果进
- AM3517之SD卡启动盘恢复NAND flash的数据:U-boot(三)
- vb.net – 如何判断SubmitChanges()是否会实际更改LINQ to
- C找到最小的3个数字
- How to handling large volumes of data on PostgreSQL?
- postgresql – 在Amazon Redshift中追加和覆盖
- c – Extern变量
- c# – 如何使用鼠标保持和释放检查TrackBar滑动