首页 > 代码库 > maven工程模块化

maven工程模块化

前言

项目的模块化有利于任务分工,后期维护,易扩展,模块还可以独立成服务单独部署等;

创建packaging类型为POM的父项目

我用的maven插件是m2e,相信大部分人在eclipse装的也是m2e插件;废话不说,直接开始:

菜单选择新建maven project,注意选择创建一个简单工程,如下图红圈所示,因为我们要创建的是packaging类型为pom的maven项目,自带的archetype里貌似没有对应的类型,反正我是没找到。

技术分享

接着点击next,在packaging选项里选择pom,然后输入必要的信息即可,如下图:

技术分享

这时候我们的pom.xml文件是这样的:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">  <modelVersion>4.0.0</modelVersion>  <groupId>cn.edu.hdu.mm</groupId>  <artifactId>multi-module</artifactId>  <version>0.0.1-SNAPSHOT</version>  <packaging>pom</packaging>  <name>multi-module</name>  <description>multi module projects.</description></project>

创建各个子模块

这里打算简单的创建一个web项目作为示例,按层划分;其实复杂点的项目是可以划分成多个子系统模块、多个服务模块,模块之间的通信可以通过jms、webservice等方式。

那么,我们就开始简单的创建common,dao,service,web几个模块吧, 这里,除了web模块的packaging类型是war,其它的都是jar,也就是说,在创建这些模块的时候,web模块选择的archetype为webapp,其它的选quickstart即可;

鼠标右键父工程,选择创建maven module;

技术分享

创建完各个模块之后,父模块与子模块的POM配置文件如下,很好理解:

父模块POM配置:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">  <modelVersion>4.0.0</modelVersion>  <groupId>cn.edu.hdu.mm</groupId>  <artifactId>multi-module</artifactId>  <version>0.0.1-SNAPSHOT</version>  <packaging>pom</packaging>  <name>multi-module</name>  <description>multi module projects.</description>  <modules>      <module>multi-module-common</module>      <module>multi-module-dao</module>      <module>multi-module-service</module>      <module>multi-module-web</module>  </modules></project>

其中的一个子模块POM配置:

<?xml version="1.0"?><project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">  <modelVersion>4.0.0</modelVersion>  <parent>    <groupId>cn.edu.hdu.mm</groupId>    <artifactId>multi-module</artifactId>    <version>0.0.1-SNAPSHOT</version>  </parent>  <artifactId>multi-module-common</artifactId>  <name>multi-module-common</name>  <url>http://maven.apache.org</url>  <properties>    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>  </properties>  <dependencies>    <dependency>      <groupId>junit</groupId>      <artifactId>junit</artifactId>      <version>3.8.1</version>      <scope>test</scope>    </dependency>  </dependencies></project>

配置各个模块之间的依赖关系

在这个demo中,模块之间的依赖关系如下:

web依赖service,service依赖dao,dao依赖common模块;

配置依赖关系很简单,比如我们需要在dao模块里配置其依赖common模块,只需在pom添加如下代码片段,跟平时的添加依赖一样:

    <dependency>        <groupId>${project.groupId}</groupId>        <artifactId>multi-module-common</artifactId>        <version>${project.version}</version>    </dependency>

注意这里的${project.groupId}和${project.version}指的是本模块的groupId和version,因为该模块和multi-module-common模块的共同父模块为multi-module,其groupId和version都继承自multi-module,所以我们这里直接写本模块的groupId和version即可。

开始开发程序

完成以上配置后,就可以开始开发我们的程序了,往common模块写一些公共的东西,dao模块访问数据源,service模块业务需求,web可以写一些jsp,action、controller等;

这里,我简单的写了个spring + spring mvc + mybatis的demo,添加了一个用户增删改查模块,前端页面就没写了~代码见最后的链接。

工程目录大致如下:

技术分享

运行war包,调试等

代码写完之后,添加数据库(脚本在工程里),然后可以在父工程的pom.xml文件里添加tomcat7-maven-plugin插件配置,右键执行tomcat:run命令,运行war包,也可以右键调试工程,debug As...

执行命令,可看到如下日志,通过日志可以看到具体的执行过程:

[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Build Order:
[INFO]
[INFO] multi-module
[INFO] multi-module-common
[INFO] multi-module-dao
[INFO] multi-module-service
[INFO] multi-module-web Maven Webapp
[INFO]
[INFO] Using the builder org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder with a thread count of 1
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building multi-module 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] >>> tomcat-maven-plugin:1.1:run (default-cli) @ multi-module >>>
[INFO]
[INFO] <<< tomcat-maven-plugin:1.1:run (default-cli) @ multi-module <<<
[INFO]
[INFO] --- tomcat-maven-plugin:1.1:run (default-cli) @ multi-module ---
[INFO] Skipping non-war project
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building multi-module-common 0.0.1-SNAPSHOT ..........................................

执行完命令后,浏览器地址输入http://localhost:8080/multi-module-web/user/getUserList.do?pageNo=0&pageSize=5,访问controller,访问成功:

技术分享

Demo源码

如下是代码,简单的写了下,仅供参考。

https://github.com/peterchenhdu/Demos/tree/master/multi-module

maven工程模块化