maven—大型项目模块化

时间:2021-09-24 00:47:59

序:

在上一篇对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。如下图所示:

maven—大型项目模块化

模块test_module的打包方式选择jar,但是尽管已经选择了,在自动生成的test_module/pom.xml中打包方式依然没指明,需要手动添加,如下图所示:

maven—大型项目模块化

下面需要把test_module作为test_web的依赖,操作如下:

maven—大型项目模块化

操作完成后如下图,现在新的模块已经添加完成了。

maven—大型项目模块化

MAVEN创建并打包web项目中的打包方式是用命令行,显然比较麻烦。那么我们可以使用eclipse来打包。

maven—大型项目模块化

按照上图选择maven build,会进入下图所示goals设置界面,把之前执行的mvn  clean package命令输入就可以了。

maven—大型项目模块化

再次点击之前点击的maven build控制台就开始运作了:

maven—大型项目模块化

细心的人会发现有个maven install,其实这个也是可以打包的,点击它后控制台的信息如下:

  1. [INFO] Building war: F:\wangpeng\MyR\projects\test\test_web\target\test_web.war  
  2. [INFO] WEB-INF\web.xml already added, skipping  
  3. [INFO]   
  4. [INFO] --- maven-install-plugin:2.4:install (default-install) @ test_web ---  
  5. [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  
  6. [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  
  7. [INFO] ------------------------------------------------------------------------  
  8. [INFO] Reactor Summary:  
  9. [INFO]   
  10. [INFO] test .............................................. SUCCESS [  0.429 s]  
  11. [INFO] test_module ....................................... SUCCESS [  1.119 s]  
  12. [INFO] test_web Maven Webapp ............................. SUCCESS [  0.491 s]  
  13. [INFO] ------------------------------------------------------------------------  
  14. [INFO] BUILD SUCCESS  
  15. [INFO] ------------------------------------------------------------------------  
  16. [INFO] Total time: 2.154 s  
  17. [INFO] Finished at: 2015-08-13T17:31:22+08:00  
  18. [INFO] Final Memory: 11M/153M  
  19. [INFO] ------------------------------------------------------------------------  
注意Installing那一行,说明此命令不仅是打包,他会把打好的包复制到本地仓库。看一下我的仓库:

maven—大型项目模块化

打开那个war包,进入WEB-INF/lib,你会发现test_module已经打包成jar作为war的一部分了。

maven—大型项目模块化