文档章节

使用maven搭建多模块项目

北有风雪
 北有风雪
发布于 2017/02/16 13:51
字数 1010
阅读 42
收藏 0
点赞 0
评论 0

代码 https://github.com/beiyoufx/maven-multi-module
代码中不包含工程文件,支持IDEA导入和Eclipse导入

我们为什么要进行模块化开发?

在多人使用Maven协作开发项目时,尤其是稍微上点规模的项目,每个RD的工作都细分到具体功能和模块,有些模块甚至还要单独部署。

我们假设有这样一个商城项目,包括以下几个模块:

  • 商城前台(shop)
  • 管理后台(admin)
  • 数据库交互模块(dao)
  • 通用业务模块(service)
  • 接口模块(api)
  • 通用工具(util)

其中shop和admin需要单独部署,dao、service、util你可能想要一些经验丰富的人来维护,如果使用一个应用来管理的话,所有的功能和模块都会耦合在一起,所有人都可以随意修改代码,这显然不是我们所期望的。

而且使用一个应用来管理的话,任何一个点的代码有变更,整个项目就需要重新build,使用模块化开发的另一个好处是如果dao的代码被修改,只需要重新build dao模块就可以了。web模块可以build成war,dao、service、util等可以build成jar,只需要配置好依赖关系,就可以实现模块间的解耦合。这样的设计才是遵循“高内聚,低耦合”设计原则的。

我们如何进行模块化开发呢?

我们使用上面的例子进行演示,先进行合理的优化,我们希望dao和service作为通用的底层工具来使用,把它们合并成一个核心模块(core),build成core.jar,简单的Maven模块化项目结构如下:

---------- mall         //顶级项目
   |------ pom.xml      //packaging = pom
   |------ mall-util    //通用工具
   |  |--- pom.xml      //packaging = jar
   |------ mall-core    //核心模块
   |  |--- pom.xml      //packaging = jar
   |------ mall-web-api //接口模块
   |  |--- pom.xml      //packaging = war
   |------ mall-web-admin//管理后台
   |  |--- pom.xml      //packaging = war
   |------ mall-web-shop//商城前台
   |  |--- pom.xml      //packaging = war

这些模块中api、admin、shop均是可以单独部署的web应用,相互之间没有依赖关系,但都依赖于core模块,而core模块依赖于util模块。接下来我们按照上述确定的结构来搭建项目结构。

使用IDEA来创建Maven多模块项目

一、创建一个普通Maven项目

  1. New Project

image

  1. 填写基本信息,这里使用ipr作为项目描述文件

image

  1. 普通Maven项目不需要使用Maven模板搭建

image

二、给Maven项目添加模块

  1. New Module

image

  1. 填写基本信息,jar项目同样不需要使用Maven模板搭建

image

  1. 这个时候就可以看到,我们所添加的module已经被引入到parent的pom文件里了
<groupId>com.mall</groupId>
<artifactId>mall</artifactId>
<packaging>pom</packaging> //打包方式为pom
<version>1.0-SNAPSHOT</version>

<modules>
    <module>mall-util</module>
</modules>
  1. 变更util模块的构建方式为jar
<parent>
    <artifactId>mall</artifactId>
    <groupId>com.mall</groupId>
    <version>1.0-SNAPSHOT</version>
</parent>

<packaging>jar</packaging> //打包方式为jar
<artifactId>mall-util</artifactId>

三、给Maven项目添加web模块

  1. 创建一个module,并选中“Create from archetype”选项,同时maven模板选择webapp

image

  1. 接下来耐心的等待maven帮你创建好module,模块信息已经被添加
<modules>
    <module>mall-util</module>
    <module>mall-web-admin</module>
</modules>

目录结构如下:

image

pom:

<parent>
    <artifactId>mall</artifactId>
    <groupId>com.mall</groupId>
    <version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>mall-web-admin</artifactId>
<packaging>war</packaging>
<name>mall-web-admin</name>
<url>https://github.com/beiyoufx</url>
<dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>3.8.1</version>
        <scope>test</scope>
    </dependency>
</dependencies>
<build>
    <finalName>mall-web-admin</finalName>
</build>

四、添加模块间的依赖关系

  1. 增加core与util的依赖

image

  1. 增加admin与core的依赖关系

image

admin与core、util的依赖链

image

多模块项目的构建与发布

打包

image

所有在root项目中进行的构建都会传递到模块中,例如root中的package会打包整个项目,当文件有变动时会进行重新聚合,其他命令同理。模块中的package只会打包当前模块。

使用source:jar命令会将源码打包。

发布

web模块可以单独部署也可聚合部署。

© 著作权归作者所有

共有 人打赏支持
北有风雪
粉丝 2
博文 33
码字总数 55091
作品 1
程序员
Maven多模块项目介绍及搭建

对于大型WEB项目的开发一个很重要的部分就是代码的复用和维护管理。但是如果在搭建的时候采用多模块搭建,可以为之后的维护管理及复用提供便利。 接下来是在IntelliJ IDEA中的一个多模块项目...

战五渣 ⋅ 2016/06/13 ⋅ 11

Maven多模块项目介绍和搭建

1Maven多模块项目介绍 为了便于演示和表达,在intellij中建了小项目进行举例,如下图所示 其中web-m2模块,依赖于common-utils, common-utils依赖于common-third,如下图所示 web-m1模块 依...

蛙牛 ⋅ 2014/12/09 ⋅ 35

IDEA下Maven多模块项目介绍和搭建

1Maven多模块项目介绍 为了便于演示和表达,在intellij中建了小项目进行举例,如下图所示 其中web-m2模块,依赖于common-utils, common-utils依赖于common-third,如下图所示 web-m1模块 依...

陶加涛 ⋅ 2016/03/19 ⋅ 0

Maven多模块布局实例详解

一、开场白 使用Maven有段时间了,只能感慨真是个好东西,让我从传统模式体会到了严谨、规范、敏捷、方便的特性。 如果你懂Maven或许看过Juven翻译的《Maven权威指南》; 发个牢骚:由于Mav...

凯文加内特 ⋅ 2015/05/08 ⋅ 2

maven 多模块开发,如何划分?请给指导性意见!!!

项目框架准备用 maven+SpringMVC+mybatis 搭建。 我看已经看过 有的人按照 dao service web util 这样划分, 还有的用 domain 里面是 数据模型(实体类)和 service以及 service iml。 将实体...

Hrong123 ⋅ 2015/02/02 ⋅ 5

maven搭建多模块企业级项目

首先,前面几次学习已经学会了安装maven,如何创建maven项目等,最近的学习,终于有点进展了,搭建一下企业级多模块项目。 好了,废话不多说,具体如下: 首先新建一个maven项目,pom.xml的文...

无信不立 ⋅ 2014/12/25 ⋅ 0

springboot多模块项目下,子模块调用报错:程序包xxxxx不存在

今天在用springboot搭建多模块项目,结构中有一个父工程Parent 一个通用核心工程core 以及一个项目工程A 当我在工程A中引入core时,没有问题,maven install正常 当我在工程A中使用core的类时...

宇的季节 ⋅ 04/09 ⋅ 0

mybatis 自定义枚举转换类

最近在搭建maven多模块项目: http://git.oschina.net/alexgaoyh/MutiModule-parent 项目整体代码部分在上文链接的git中,下面的代码段落只是部分个人觉得比较重要的段落 在选择持久化DAO部分...

alexgaoyh ⋅ 2015/04/15 ⋅ 0

手写Maven的archetype项目脚手架

一、背景   maven是一个很好的代码构建工具,采用“约定优先于配置”的原则进行项目管理,相信很多的java开发者应该都了解maven并可能在工作当中都是通过maven来管理项目的,在创建的项目的...

hafiz.zhang ⋅ 2017/09/18 ⋅ 0

基于 Spring Boot 的企业级快速开发脚手架 - SLife

SLife 是使用 Spring Boot 搭建的一个企业级快速开发脚手架。SLife 的目的是帮助初学者入门Spring boot 并能快速了解 一个web框架的快速搭建。同时帮助出创企业快速搭建属于自己的基础软件,...

jamen ⋅ 2017/12/13 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

IDEA创建SpringMVC+Mybatis+Maven项目

视频如下(加载有点慢请见谅,服务器不太好): 视频

影狼 ⋅ 17分钟前 ⋅ 0

前阿里P8架构师:精准定制Java架构师学习计划!

可以说,Java是现阶段中国互联网公司中,覆盖度最广的研发语言,掌握了Java技术体系,不管在成熟的大公司,快速发展的公司,还是创业阶段的公司,都能有立足之地。 有不少朋友问,除了掌握J...

java高级架构牛人 ⋅ 20分钟前 ⋅ 0

zookeper学习

https://blog.csdn.net/u012152619/article/category/6470028

~少司命~ ⋅ 21分钟前 ⋅ 0

Spring MVC ,JSON,JQuery,不懂JQuery,跳过了

/spring-mvc-study/src/main/webapp/course_json.jsp <%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD ......

颖伙虫 ⋅ 21分钟前 ⋅ 0

2018上海云栖大会workshop-日志数据采集与分析对接

摘要: 日志数据采集与分析对接 课程描述 通过日志服务采集用户、数据库、业务等访问数据。演示对于业务日志分析与处理,程序日志查询与监控,打通日志与数据仓库对接案例。 日志种类 网站访...

阿里云云栖社区 ⋅ 22分钟前 ⋅ 0

mahout demo

package com.datamine.CollaborativeFiltering.mysql; import org.apache.mahout.cf.taste.impl.neighborhood.NearestNUserNeighborhood; import org.apache.mahout.cf.taste.impl.recommend......

xiaomin0322 ⋅ 23分钟前 ⋅ 0

red hat openstack 12配置要求

安装 openstack 之前,一般要规划整个系统中,到底要多少台机器来参与openstack, 根据rhosp12的官方文档: 最低要求是3台物理机,1台作为director,一台作为 controller ,一台作为computer....

tututu_jiang ⋅ 25分钟前 ⋅ 0

Rocket-Chip在GitHub上的各个源码

在github上通过搜索Rocket-chip可以得到36个结果:其中 https://github.com/freechipsproject/rocket-chip https://github.com/ucb-bar/riscv-boom https://github.com/ucb-bar/fpga-zynq (......

whoisliang ⋅ 30分钟前 ⋅ 0

【HAVENT原创】CentOS 6.5 下 Nginx 的安装与配置

nginx是轻量级的Web服务器、反向代理服务器及邮件服务器,具有占用内存少,并发能力强的优点,已被广泛应用。本文介绍目前最新版本 1.12.2 的安装。 各版本nginx下载地址:http://nginx.org/...

HAVENT ⋅ 36分钟前 ⋅ 0

查看linux系统重启之前的log -- last_kmsg

当 Linux Kernel 出现 BUG 的时候,后走入 panic flow,这个时候由于 Kernel 出现了严重的问题,adbd 也无法响应 adb 连接请求,这个时候想透过读取 Kernel Log Buffer 来看 Kernel Log 是不...

zyzzu ⋅ 37分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部