Maven的多模块可以让项目结构更明确,提高功能的内聚,降低项目的耦合度,真正的体现出分层这一概念。

  我们在操作中,要明白为什么这样做,要了解到更深的层次,这样,我们就不限于个别软件了。

  话不多说,直入主题:

  如果对Maven还不够熟悉,请看该博客:Maven基础

  整个项目做完之后的结构是这样的:

  

  

  在开始之前我放出这两张图是maven多模块项目做完后的目录结构,以免大家被eclipse的结构迷惑了。

  首先,新建一个maven项目,如图:

  

  选project,注意是Create a simple project,然后特别注意,root目录的聚合模块的packing是pom!!!

  完后在该maven项目上新建模块:

  

  在这里,service层使用简单的maven-archetype-quickstart即可,packing使用jar类型,web层则使用maven-archetype-webapp的web项目,packing使用war类型。在这里,jar类型是为了让其他项目引用更方便,而war类型是为了能在服务器部署它。

  结构说明

  到了这一步,我们已经将这些模块建好了,接下来我要深入一下项目结构,以及多模块的原理,然后我们再配置pom文件。

  

  这是一个项目大概运行机制,ssm-integration作为聚合父级项目,就是为了管理其他子项目(模块),多模块就是基于聚合父级项目的。子模块service是对数据处理的模块,在这里是ssm框架,那么它负责完成对数据库的操作的封装(大概结构,具体不细说),然后对外暴露一个接口供web模块调用即可。也就是当web模块引用了ssm-service.jar之后,供web项目调用的只有你对外暴露的接口,这就真正实现分层。而web模块,只负责servlet、视图模型、前端页面和一些简单的逻辑,需要时调用ssm-service.jar的接口方法就行了。当对项目进行部署时,只需部署ssm-web即可,因为ssm-integration仅仅负责管理,你可以将它理解为承载着多模块的大框架,而ssm-service已经打包给ssm-web了(ssm-web里面已经有ssm-service了)。

  pom.xml分析

  在这之前,我声明一下,聚合和继承是可以分开的,只是大家想方便一下,所以统称为父项目。

  我们开始看pom的配置,首先时父项目的pom.xml(这里只截取一部分,了解方法为重点):

  父类pom.xml分析

 <?xml version="1.0" encoding="UTF-8"?>
<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.zuoyu.ssm</groupId>
<artifactId>ssm-integration</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<name>ssm-integration</name>
<description>spring&amp;springMVC&amp;mybatis的整合</description> <modules>
<module>ssm-service</module>
<module>ssm-controller Maven Webapp</module>
</modules> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<spring.version>4.3.8.RELEASE</spring.version>
</properties> <build>
<pluginManagement>
<plugins>
<!-- 编译插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin> <!-- 用UTF-8编码处理资源文件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.6</version>
<configuration>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</pluginManagement>
<!-- <resources>
<!--资源位置配置-->
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
<!--指定资源的位置-->
<resource>
<directory>src/main/resources</directory>
</resource>
</resources> -->
</build> <dependencyManagement>
<dependencies>
<!-- 单元测试 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!-- spring核心包 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency> <!-- 扫描用包 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency> <!-- 缓存扫描用包 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${spring.version}</version>
</dependency> <!-- bean支持 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring.version}</version>
</dependency>
</dependencyManagement>
</project>

  在这里,<modules>xxx<modules>是将需要管理的模块放进去,放进去的模块归该聚合项目管理。例如<pluginManagement>xxx</pluginManagement>或<dependencyManagement>xxx</dependencyManagement>是父类里独有的,为的是统一资源包,方便管理。
  

  子类pom.xml分析

  看一下子类的代码,以web模块为例

  

 <?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.zuoyu.ssm</groupId>
<artifactId>ssm-integration</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>ssm-controller</artifactId>
<packaging>war</packaging>
<name>ssm-controller</name>
<url>http://maven.apache.org</url> <dependencies> <dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
<!-- springMVC核心包 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
</dependency> <!-- jstl支持 -->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
</dependency> <dependency>
<groupId>org.apache.taglibs</groupId>
<artifactId>taglibs-standard-impl</artifactId>
</dependency> <dependency>
<groupId>org.apache.taglibs</groupId>
<artifactId>taglibs-standard-spec</artifactId>
</dependency> <!-- 对service的依赖 -->
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>ssm-service</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
<build>
<plugins>
<!-- 编译插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
</plugin> <!-- 编码设置 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
</plugin>
</plugins>
<finalName>ssm-controller</finalName>
</build>
</project>

  你会发现多了<parent></parent>标签,这里面写的就是它要继承的父项目。你还会发现项目没有声明groupId和version,因为它已经有父项目了,父项目已经管理了它的来源和版本号。你还会发现plugin插件和dependency依赖没有声明version,这就是父项目里写pluginManagement和dependencyManagement的优点,父项目里的这个如果子项目没有声明则不会导入该依赖或插件,如果需要,只需声明groupId和artifactId即可,方便管理。另外,必须将该项目依赖的其他项目的pack引用过来,不然多模块就失去了意义,根本运行不起来。

  注意:

  在maven多模块项目里,子项目的classpath共用的。

  部署:

  在IntelliJ IDEA里部署MavenWeb项目和MyEclipse部署是有差异的,MyEclipse要很简单:

  

  就好了,只部署ssm-web即可。

  到了这一步,还差很关键的一部,就是在你运行之前,要保证你的maven仓库有ssm-service,就是你service层的jar包,不然ssm-web根本找不到ssm-service.jar,所以,我们要这样:

  

  否则无法运行。

  然后...

  看一下整体结构:

  

  就可以运行了...

  若有不对的地方欢迎+感谢评论指出或邮件我  zuoyuip@qq.com

  共同进步

MyEclipse的多模块Maven web(ssm框架整合)的更多相关文章

  1. 基于maven的ssm框架整合

    基于maven的ssm框架整合 第一步:通过maven建立一个web项目.                第二步:pom文件导入jar包                              (1 ...

  2. IDEA下基于MAVEN的SSM框架整合

    源码可以以上传github https://github.com/ingxx/ssm_first 最近把用IDEA把SSM框架整合一遍遇到了不少坑,在这里写出来 这里maven我使用的是自己下载的3. ...

  3. IDEA使用maven搭建SSM框架整合项目(超级详细,值得一看)

    目录 温馨提示 简单介绍下SSM 搭建过程 一.框架介绍 二.下载Maven 三.创建Maven项目 四.Maven工程需要引入的Jar 包 五.整合SSM框架.需要的相关配置文件配置项目 六.工程导 ...

  4. maven项目快速搭建SSM框架(一)创建maven项目,SSM框架整合,Spring+Springmvc+Mybatis

    首先了解服务器开发的三层架构,分配相应的任务,这样就能明确目标,根据相应的需求去编写相应的操作. 服务器开发,大致分为三层,分别是: 表现层 业务层 持久层 我们用到的框架分别是Spring+Spri ...

  5. 使用Maven完成SSM框架整合环境构建——基于Spring4和Mybatis3

    只言片语 使用Maven来搭建一个SSM环境,其实和使用手工倒入jar的过程没有多大区别,所用的jar包都是一样的,但是区别在与不用你手动导入jar包了,而是只修改pom.xml,maven会自动根据 ...

  6. SSM框架整合环境构建——基于Spring4和Mybatis3

    目录 环境 配置说明 所需jar包 配置db.properties 配置log4j.properties 配置spring.xml 配置mybatis-spring.xml 配置springmvc.x ...

  7. Maven项目搭建(二):Maven搭建SSM框架

    上一章给大家讲解了如何使用Maven搭建web项目. 这次给大家介绍一下怎么使用Maven搭建SSM框架项目. 首先我们来看一下pom.xml的属性介绍: project: pom的xml根元素. p ...

  8. Eclipse中使用Maven搭建SSM框架

    Eclipse中不使用Maven搭建SSM框架:https://www.cnblogs.com/xuyiqing/p/9569459.html IDEA中使用Maven搭建SSM框架:https:// ...

  9. 使用IntelliJ IDEA创建Maven聚合工程、创建resources文件夹、ssm框架整合、项目运行一体化

    一.创建一个空的项目作为存放整个项目的路径 1.选择 File——>new——>Project ——>Empty Project 2.WorkspaceforTest为项目存放文件夹 ...

随机推荐

  1. The program 'yum' is currently not installed. You can install it by typing:

    执行:(可以直接写成sudo su,就直接转成root了) sudo apt-get updateapt-get install lrzsz 出现:The program 'yum' is curre ...

  2. python写一个信息收集四大件的脚本

    0x0前言: 带来一首小歌: 之前看了小迪老师讲的课,仔细做了些笔记 然后打算将其写成一个脚本. 0x01准备: requests模块 socket模块 optparser模块 time模块 0x02 ...

  3. Php显示中文时乱码

    <?php echo "你们好哈"; ?> 显示乱码,解决办法 <?php header("content-type:text/html; charse ...

  4. 设计模式——观察者模式(C++实现)

    #include <iostream> #include <vector> #include <algorithm> #include <iterator&g ...

  5. python 对象和json互相转换

    一.python对json的支持 从python2.6开始,python标准库中添加了对json的支持,操作json时,只需要import json即可. 二.python对象转换成json字符串 在 ...

  6. Asp.Net Core 2.0 项目实战(11) 基于OnActionExecuting全局过滤器,页面操作权限过滤控制到按钮级

    1.权限管理 权限管理的基本定义:百度百科. 基于<Asp.Net Core 2.0 项目实战(10) 基于cookie登录授权认证并实现前台会员.后台管理员同时登录>我们做过了登录认证, ...

  7. [Luogu 1395] 会议

    题目 Description 有一个村庄居住着n个村民,有n-1条路径使得这n个村民的家联通,每条路径的长度都为1.现在村长希望在某个村民家中召开一场会议,村长希望所有村民到会议地点的距离之和最小,那 ...

  8. cloneNode和replaceChild

    node.cloneNode(deep) var node=document.getElementById("myList2").lastChild.cloneNode(true) ...

  9. 【Python】 系统配置/进程等信息查看 psutil

    psutil 原以为psutil只是跟进程有关的一个模块,没想到它其实提供了从CPU到内存各种各样的信息,十分IMBA.记录一下 我用了pip install psutil安装的这个模块,不过路中遇到 ...

  10. 最近用spring4.x整合Jackson------>java.lang.ClassNotFoundException:

    最近用spring4.x整合Jackson,结果莫名其妙的一直报错,网上收索的结果都是在maven或者gradle的环境下配置依赖条件解决的:但是eclipseIDE环境下的jar包应该是会自动依赖影 ...