一、分模块开发和设计
将每一层都拆为一个模块,然后修改对应的配置文件
将每一个模块进行编译【compile】,安装【install】到本地仓库
在需要使用到地方,在 pom.xml 文件中以依赖的形式导入
SSM_pojo 拆分
新建模块【不需要添加模板】
拷贝原始项目中对应的相关内容到 SSM_pojo 模块中
实体类
配置文件(无)
SSM_mapper 拆分
新建模块
拷贝原始项目中对应的相关内容到 SSM_mapper 模块中
数据访问层接口
配置文件:保留与数据访问层相关配置文件(3个)
注意:分页插件在配置中与 SqlSessionFactoryBean 绑定,需要保留
pom.xml:引入数据访问层相关坐标即可,删除 SpringMVC 相关坐标
spring
mybatis
spring 整合 mybatis
mysql
druid
pagehelper
直接依赖 SSM_pojo (对 SSM_pojo 模块执行 install 指令,将其安装到本地仓库)
SSM_service 拆分
新建项目
拷贝原始项目中对应的相关内容到 SSM_service 模块中
业务逻辑层接口与实现类
配置文件:保留与数据访问层相关配置文件(1个)
pom.xml:引入数据访问层相关坐标即可,删除 SpringMVC 相关坐标
spring
junit
spring 整合 junit
直接依赖 SSM_mapper(对 SSM_mapper 模块执行 install 指令,将其安装到本地仓库)
间接依赖 SSM_pojo(由 SSM_mapper 模块负责依赖关系的建立)
修改 service 模块 spring 核心配置文件名,添加模块名称,格式:applicationContext_service.xml
修改 mapper模块 spring 核心配置文件名,添加模块名称,格式:applicationContext_mapper.xml
修改单元测试引入的配置文件名称,由单个文件修改为多个文件
SSM_controller 拆分
新建模块【使用 webapp 模板】
拷贝原始项目中对应的相关内容到 SSM_controller 模块中
界面层控制器类与相关设置类
配置文件:保留与界面层相关配置文件(1个)、服务器相关配置文件(1个)
pom.xml:引入数据访问层相关坐标即可,删除 SpringMVC 相关坐标
spring
springmvc
jackson
servlet
tomcat 服务器插件
直接依赖 SSM_service(对 SSM_service 模块执行 install 指令,将其安装到本地仓库)
间接依赖 SSM_mapper、SSM_pojo
修改 web.xml 配置文件中加载 spring 环境的配置文件名称,使用 “ * ” 通配符,加载所有 applicationContext_ 开始的配置文件
小结:
-
模块中仅包含当前模块对应的功能类与配置文件
-
spring 核心配置根据功能模块不同进行独立制作
-
当前模块所依赖的模块通过导入坐标的形式加入当前模块后才可以使用
-
web.xml 需要加载所有的 spring 核心配置文件
二、聚合
将项目拆分为多个模块后,当其中某一模块发生修改更新,其他模块并未知道其已经更新,可能会导致出错
解决方案:
添加一个模块来控制其他所有模块,运行此模块,其他的模块也会做出相应的操作,以此解决上述问题,称为聚合
新建项目 SSM【仅保留 pom.xml 文件】
<!--添加以下代码-->
<!--定义该模块用于进行构建管理-->
<packaging>pom</packaging>
<!--管理的工程列表-->
<modules>
<!--具体的工程名称-->
<module>../ssm_pojo</module>
<module>../ssm_mapper</module>
<module>../ssm_service</module>
<module>../ssm_controller</module>
</modules>
注意:参与聚合操作的模块最终执行顺序与模块间的依赖关系有关,与配置顺序无关
三、继承
在子工程中可能会重复使用到同一个依赖,若没有对这些依赖进行管理,可能会出现各个子工程同一个依赖的版本不一致,此时可以在父工程中对各个公共依赖进行版本管理,这样在整个工程中所有的依赖版本就统一了
在 SSM 项目的 pom.xml 中添加以下代码【父工程】
<dependencyManagement>
<dependencies>
<!--在此处写所有需要管理的依赖-->
</dependencies>
</dependencyManagement>
在使用到相关依赖的模块中添加以下代码【子工程】
<!--定义该工程的父工程-->
<parent>
<groupId>org.example</groupId>
<artifactId>ssm</artifactId>
<!--填写父工程的 pom.xml 文件-->
<relativePath>.../ssm/pom.xml</relativePath>
</parent>
<!--以下两个可以不写-->
<!--<groupId>com.qiuxuan</groupId>-->
<!--<version>1.0</version>-->
<!--以下两个不变-->
<artifactId>project-java</artifactId>
<packaging>jar</packaging>
【父工程】
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.5.RELEASE</version>
</dependency>
【子工程】
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
</dependency>
四、属性
【定义自定义属性】
<properties>
<springmvc.version>5.2.5</springmvc.version>
</properties>
【使用】
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${springmvc.version}</version>
</dependency>
【内置属性】
${basedir}
${version}
【setting 属性】
使用 Maven 配置文件 setting.xml 中的标签属性,用于动态配置
${settings.localRepository}
【Java系统属性】
${user.home}
系统属性查询方式
mvn help:system
${java.runtime.name} ===== Java(TM) SE Runtime Environment
===============================================================================
System Properties
===============================================================================
java.runtime.name=Java(TM) SE Runtime Environment
......
【环境变量属性】
使用 Maven 配置文件 setting.xml 中的标签属性,用于动态配置
${env.JAVA_HOME}
环境变量属性查询方式
mvn help:system
===============================================================================
Environment Variables
===============================================================================
GATEWAY_VM_OPTIONS=D:\Software\ja-netfilter-all\vmoptions\gateway.vmoptions
......
五、私服
【Nexus】
下载地址:Downloadhttps://help.sonatype.com/repomanager3/product-information/download
安装并在 bin 目录下使用命令行启动 nexus /run nexus
端口号可以在 etc 目录下修改
仓库分类
-
宿主仓库 hosted
-
保存无法从中央仓库获取的资源
-
自主研发
-
第三方非开源项目
-
-
-
代理仓库 proxy
-
代理远程仓库,通过 Nexus 访问其他公共仓库,例如中央仓库
-
-
仓库组 group
-
将若干个仓库组成一个群组,简化配置
-
仓库组不能保存资源,属于设计型仓库
-
idea 环境中资源下载与上传
maven 的 setting.xml 文件中添加
<servers>
<!--配置访问Nexus服务器的权限-->
<server>
<id>qiuxuan-release</id>
<username>admin</username>
<password>admin</password>
<server>
<server>
<id>qiuxuan-snapshots</id>
<username>admin</username>
<password>admin</password>
<server>
</server>
<mirrors>
<!--配置具体的仓库的下载镜像-->
<mirror>
<!--此镜像的唯一标识符,用来区分不同的 mirror 元素-->
<id>nexus-aliyun</id>
<!--对哪种仓库进行镜像,简单说就是替代那个仓库-->
<mirrorOf>central</mirrorOf>
<!--镜像名称-->
<name>Nexus aliyun</name>
<!--镜像 URL-->
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
<!--自定义私服-->
<mirror>
<!--此镜像的唯一标识符,用来区分不同的 mirror 元素-->
<id>nexus-qiuxuan</id>
<!--对哪种仓库进行镜像,简单说就是替代那个仓库-->
<mirrorOf>*</mirrorOf>
<!--镜像 URL-->
<url>http://localhost:8081/repository/maven-public/</url>
</mirror>
</mirrors>
【在服务器中添加两个仓库】
【将两个仓库添加到仓库组中】
【IDEA 配置上传组件】
<!--发布配置-->
<distributionManagement>
<repository>
<id>qiuxuan-release</id>
<url>http://localhost:8081/repository/qiuxuan-release/</url>
</repository>
<snapshotRepository>
<id>qiuxuan-snapshots</id>
<url>http://localhost:8081/repository/qiuxuan-snapshots/</url>
</snapshotRepository>
</distributionManagement>
【发布资源到私服】
mvn deploy
一 叶 知 秋,奥 妙 玄 心