- Maven
Apache Maven is a software project management and comprehension tool.
Based on the concept of a project object model (POM), Maven can manage
a project’s build, reporting and documentation from a central piece of
information.
Maven就是一个不需要手动导入依赖、项目打包和项目构建的工具
Maven中重要的两个关键词:继承和聚合。
继承:作用就是避免配置重复,对于子项目来说应该关心父项目是怎么样配置的。
聚合:字面理解就是“聚在一起合作完成工作”,就是将子模块聚集起来完成相应的项目需求
- 为什么要进行模块化开发?
在多人使用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模块。接下来我们按照上述确定的结构来搭建项目结构。
创建项目
使用开发工具STS,其他工具也大同小异
(1) new -> Maven project 选择项目放置的地点 和勾选 create a simple project ,命名study
注意:父项目要使用 pom 方式进行packaging, 有三种 默认是 jar ,还有一种是web项目的war
(2)父项目建立好之后,开始建立子模块 new 一个 Maven module
命名为study-dao,parent为 study
选择quickstart
groupID 要和父项目一致,点击finish
查看一下study-dao的pom.xml
查看一下study的pom.xml
(3)同上一样的方式建立 study-service
只是注意 study-service 模块需要引入 study-dao,在study-service模块的pom.xml 文件中加上
spring-context也需要用到,先加上
<dependencies>
<dependency>
<groupId>com.study</groupId>
<artifactId>study-dao</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.3.12.RELEASE</version>
</dependency>
</dependencies>
(4)建立 study-web 模块同上有一点不同,就是他是webapp ,需要打包成war
刚建立的时候会有报错,不要紧,加上 run server就可以
看一眼整个项目的目录结构,整体架子搭建起来了
study-web的pom.xml 添加依赖, 整合SSM框架
<?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>com.study</groupId>
<artifactId>study</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<groupId>com.study</groupId>
<artifactId>study-web</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<name>study-web Maven Webapp</name>
<url>http://maven.apache.org</url>
<properties>
<spring.version>4.3.12.RELEASE</spring.version>
<servlet.version>3.1.0</servlet.version>
<commons-codec>1.10</commons-codec>
<mybatis.version>3.4.4</mybatis.version>
<mybatis-spring>1.3.0</mybatis-spring>
<c3p0>0.9.5.2</c3p0>
<commons-logging>1.1</commons-logging>
<mysql-connector-java>5.1.41</mysql-connector-java>
<mybatis-generator-core>1.3.2</mybatis-generator-core>
<pagehelper>5.0.0</pagehelper>