记得在校的时候,通常用的比较多是动态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项目也打算采用这种开发方式。

今天只是浅谈,一时灵感,让我忍不住想要分享。大家针对该随笔有更好的意见和想法,欢迎分享

谈谈maven多模块的更多相关文章

  1. Maven多模块,Dubbo分布式服务框架,SpringMVC,前后端分离项目,基础搭建,搭建过程出现的问题

    现互联网公司后端架构常用到Spring+SpringMVC+MyBatis,通过Maven来构建.通过学习,我已经掌握了基本的搭建过程,写下基础文章为而后的深入学习奠定基础. 首先说一下这篇文章的主要 ...

  2. [转]Maven 划分模块

    所有用Maven管理的真实的项目都应该是分模块的,每个模块都对应着一个pom.xml.它们之间通过继承和聚合(也称作多模块,multi-module)相互关联.那么,为什么要这么做呢?我们明明在开发一 ...

  3. IntelliJ Idea14 创建Maven多模块项目

    Maven多模块项目的参考资料 Sonatype上的教程 http://books.sonatype.com/mvnex-book/reference/multimodule.html 在这个教程里, ...

  4. [置顶] Maven多模块项目 eclipse热部署 Maven项目实现 tomcat热部署 二

    最近看到有好多童鞋比较热衷热部署,特别是多模块的项目,其实这热部署如果多模块比较大资源,容易内存溢出或者电脑卡住,并不建议这么做. 不过了解下也没有关系,这里我就在说说热部署的另外一种方法,因为我之前 ...

  5. Maven入门,Maven项目的创建,nexus 2.x搭建私服以及Maven多模块项目创建

    maven的了解做一个总结,以便日后查阅, 若有不足之处,还望指出,学无止境 当然也能起到入门效果. 一,搭建maven私服 1.工具 a. Nexus 2.5.1-01 b. Maven 3.3.9 ...

  6. eclipse导入SVN上的Maven多模块项目

    eclipse导入SVN上的Maven多模块项目 博客分类: Eclipse&MyEclipse SVN Maven   一.SVN上Maven多模块项目结构 使用eclipse导入SVN上的 ...

  7. Maven多模块的开发项目搭建

    系统越复杂,所有的业务逻辑都放在一个项目里,各个包之间的业务逻辑相互调用,这样添加了开发成本,同时对之后的系统维护,错误排查带来一定的麻烦. 通过Maven的多模块开发,把一个系统拆分成多个模块,通过 ...

  8. Maven分模块以及打war包

    我们如何进行模块化开发呢? 我们使用上面的例子进行演示,先进行合理的优化,我们希望dao和service作为通用的底层工具来使用,把它们合并成一个核心模块(core),build成core.jar,简 ...

  9. IntelliJ IDEA中创建Web聚合项目(Maven多模块项目)

    Eclipse用多了,IntelliJ中创建Maven聚合项目可能有小伙伴还不太熟悉,我们今天就来看看. IntelliJ中创建普通的Java聚合项目相对来说比较容易,不会涉及到web操作,涉及到we ...

随机推荐

  1. Java框架之Spring(三)

    本文主要介绍Spring中, 1 Bean 的 init-method 和 destroy-method 2 集合类型的装配 3 注解方式装配 4 以自动扫描把组件纳入spring容器中管理 5 代理 ...

  2. 贝尔数(来自维基百科)& Stirling数

    贝尔数   贝尔数以埃里克·坦普尔·贝尔(Eric Temple Bell)为名,是组合数学中的一组整数数列,开首是(OEIS的A000110数列):   Bell Number Bn是基数为n的集合 ...

  3. Flask 中的 特殊装饰器before_request/after_request

    before_request :在请求收到之前绑定一个函数做一些事情. after_request: 每一个请求之后绑定一个函数,如果请求没有异常. teardown_request: 每一个请求之后 ...

  4. php中一个字符占用几个字节?

    先看看字符与字节有什么区别: (一)“字节”的定义 字节(Byte)是一种计量单位,表示数据量多少,它是计算机信息技术用于计量存储容量的一种计量单位. (二)“字符”的定义 字符是指计算机中使用的文字 ...

  5. git命令详解( 八)

    此为记录git的第八篇,前七篇为远程篇,工作中最常用的都在前七篇,因为要在远程分支上合作开发     在提交树上移动 撤销变更 在提交树上移动 在接触 Git 更高级功能之前,我们有必要先学习在你项目 ...

  6. springboot 配置文件说明

    你可以在自己创建的组件上使用@ConfigurationProperties注解,而Spring Boot自动配置的很多组件也添加了@ConfigurationProperties注解,可以通过Spr ...

  7. Ajax的实现及使用-原生对象

    正文 学习JavaScript就不得不提到Ajax,从2005年开始,Ajax技术就开始席卷整个Web世界.作为一个前端来说,大部分时间中都是使用的库中封装好的ajax模块(jQuery),即使已使用 ...

  8. Fiddler抓包使用教程-基本功能介绍

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/72932886 本文出自[赵彦军的博客] Fiddler 基本页面 会话列表功能介绍 ...

  9. 13.1、多进程:进程锁Lock、信号量、事件

    进程锁: 为什么要有进程锁:假如现在有一台打印机,qq要使用打印机,word文档也要使用打印机,如果没有使用进程锁,可能会导致一些问题,比如QQ的任务打印到一半,Word插进来,于是打印出来的结果是各 ...

  10. 为什么 APM 能提升 IT 团队工作质量?

    “有必要吗?”这是很多 IT 专业人员在尝试向团队内部推荐应用程序性能管理价值时所面临的问题.APM(应用程序性能管理)能为公司节约成本,提高内部工作效率,并真实了解用户对公司的系统和产品是否满意.除 ...