序:
在上一篇对maven项目有了初步的了解。这一篇文章主要介绍一下大型项目通过Maven来拆分项目,进行项目的模块化。为什么我们需要对大型项目进行模块化处理。
随着公司的业务发展和日益增长的需求,我们的项目会依赖更多的第三方组件,会在项目中加入更多的功能。例如阿里巴巴电商项目,最开始可能只是一个电商项目。但随着业务的壮大,加入ERP,支付,金融,客服,旺旺语音等。越来越多衍生出来的服务和功能,不可能一直放在一个项目中,这样的系统也太难维护。加上开发水平的良莠不齐,可能存在改了一块代码,不小心把主干代码也给删了。导致整个系统的崩溃,这样的损失是项目承受不起的。
当然,阿里的技术不可能仅仅是模块化项目,还有微服务,以及其他更多的内容。这里就是简单的提一下,中小型企业也会运用到这种技术,来解决项目过于复杂,冗余。
模块化大致分为两种,一种是业务层面的模块化,还有一种是开发模型方面的模块化。
这里就简单讲下开发模型方面的模块化。
什么是java开发模型方面的模块化?
一般在开发中,我们会将开发内容进行分层。典型的MVC模型,就是将项目分为model(模型),view(视图),controller(控制层)。在做项目时我们会提供一些项目独有的工具(util),或者通过自行定制开发项目的基类(system)。这些在项目中,按照一般的开发习惯,我们会按业务分模块,再在各个业务模块中,自行去创建这些层级关系。稍微打磨的项目,可能就是再抽一些超类或者将共有的类抽成全局通用的放在system包里面。
但我们可以将项目一开始就进行模块化处理,将一个项目中的分层思想进行模块化。例如项目足够大,model就可以成为一个单独的模块,视图(view)也是。web也可以是一个模块。系统通用平台也可以是一个模块。下面就讲讲,怎么自行创建一个模块化的项目以及其中的配置。
maven的最大的特点之一就是可以把项目模块化。
前面的一篇文章MAVEN创建并打包web项目已经创建了一个简单的webapp,注意这个webapp的打包方式是war。如果现在又要划分出来一个模块,而webapp依赖这个新划分的模块,应该怎么做呢,磨叽!
首先创建一个maven module,它的parent是test,不能是其他的,因为只有test的打包方式是pom。如下图所示:
模块test_module的打包方式选择jar,但是尽管已经选择了,在自动生成的test_module/pom.xml中打包方式依然没指明,需要手动添加,如下图所示:
下面需要把test_module作为test_web的依赖,操作如下:
操作完成后如下图,现在新的模块已经添加完成了。
MAVEN创建并打包web项目中的打包方式是用命令行,显然比较麻烦。那么我们可以使用eclipse来打包。
按照上图选择maven build,会进入下图所示goals设置界面,把之前执行的mvn clean package命令输入就可以了。
再次点击之前点击的maven build控制台就开始运作了:
细心的人会发现有个maven install,其实这个也是可以打包的,点击它后控制台的信息如下:
- [INFO] Building war: F:\wangpeng\MyR\projects\test\test_web\target\test_web.war
- [INFO] WEB-INF\web.xml already added, skipping
- [INFO]
- [INFO] --- maven-install-plugin:2.4:install (default-install) @ test_web ---
- [INFO] Installing F:\wangpeng\MyR\projects\test\test_web\target\test_web.war to C:\Users\wangpeng\.m2\repository\com\wangpeng\testmaven\test_web\0.0.1-SNAPSHOT\test_web-0.0.1-SNAPSHOT.war
- [INFO] Installing F:\wangpeng\MyR\projects\test\test_web\pom.xml to C:\Users\wangpeng\.m2\repository\com\wangpeng\testmaven\test_web\0.0.1-SNAPSHOT\test_web-0.0.1-SNAPSHOT.pom
- [INFO] ------------------------------------------------------------------------
- [INFO] Reactor Summary:
- [INFO]
- [INFO] test .............................................. SUCCESS [ 0.429 s]
- [INFO] test_module ....................................... SUCCESS [ 1.119 s]
- [INFO] test_web Maven Webapp ............................. SUCCESS [ 0.491 s]
- [INFO] ------------------------------------------------------------------------
- [INFO] BUILD SUCCESS
- [INFO] ------------------------------------------------------------------------
- [INFO] Total time: 2.154 s
- [INFO] Finished at: 2015-08-13T17:31:22+08:00
- [INFO] Final Memory: 11M/153M
- [INFO] ------------------------------------------------------------------------
打开那个war包,进入WEB-INF/lib,你会发现test_module已经打包成jar作为war的一部分了。