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. Mac上使用jenkins+ant执行第一个程序

    本文旨在让同学们明白如何让jenkis在mac笔记本上运行,以模拟实际工作中在linux上搭建jenkins服务平台首先按照笔者的习惯先说一下如何安装jenkis和tomcat,先安装tomcat,在 ...

  2. Windows Live Writer 2014版绿色版制作及主题获取

    前年才建好博客的时候就尝试用Windows Live Writer(WLW)写博客,用的是直接在网上找到的一个WLW 2009绿色美化版.但因为当时WLW获取的博客主题是主页的,预览的时候特别不爽,就 ...

  3. android 获取wifi列表,如果你忽略了这个细节,可能你的软件会崩溃

    一:业务描述 最近公司有一个小需求,用户点击wifi扫描按钮(注意:是用户主动点击wifi扫描按钮),app去扫描附近的wifi,显示在listView中,仅此而已,app都不用去连接某个wifi,看 ...

  4. angularjs常用事件

    1. 视图模板加载完毕 $scope.$on('$viewContentLoaded', function() { alert('view template loaded'); });

  5. 跨域的另一种解决方案CORS(CrossOrigin Resource Sharing)跨域资源共享

    在我们日常的项目开发时使用AJAX,传统的Ajax请求只能获取在同一个域名下面的资源,但是HTML5打破了这个限制,允许Ajax发起跨域的请求.浏览器是可以发起跨域请求的,比如你可以外链一个外域的图片 ...

  6. 【windows】 配置一个本地的tomcat服务器

    配置tomcat 公司的许多业务都是用java+tomcat模式的,做本地测试的时候经常要搭建一个自己的tomcat服务器.整个操作不难,但是记录一下,万一以后遇到什么问题也可以放这里. ■ 安装ja ...

  7. ReflectASM-invoke,高效率java反射机制原理

    前言:前段时间在设计公司基于netty的易用框架时,很多地方都用到了反射机制.反射的性能一直是大家有目共睹的诟病,相比于直接调用速度上差了很多.但是在很多地方,作为未知通用判断的时候,不得不调用反射类 ...

  8. java 打印近似圆

    只要给定不同半径,圆的大小就会随之发生改变近似圆如图 设半径为r,圆心为(r,r). 由勾股定理 易得y = r -√(2*r*x-x*x) 此处注意x+=2.因为打印窗口上一行2个字节的宽度与一列的 ...

  9. 查看http的并发请求数与其TCP连接状态

    [root@new-web7 ~ ::]#netstat -na | awk '/^tcp/ {++S[$NF]} END {for(i in S) print i, S[i]}' TIME_WAIT ...

  10. Leaflet客户端学习笔记

    Leaflet介绍 Leaflet 是一个为建设交互性好适用于移动设备地图,而开发的现代的.开源的 JavaScript 库.代码仅有 33 KB,但它具有开发在线地图的大部分功能.支持插件扩展, L ...