分模块开发与设计
将项目按功能或模块进行拆分,分模块对项目进行开发。
好处:降低耦合,方便团队协作
分模块开发注意事项
- 模块中仅包含当前模块对应的功能类与配置文件
- spring核心配置根据模块功能不同进行独立制作
- 当前模块所依赖的模块通过导入坐标的形式引入
- web.xml需要加载所有的spring核心配置文件
聚合
作用:聚合用于快速构建maven工程,一次性构建多个项目/模块。
制作方式:
- 创建一个空模块,打包类型定义为
pom
- 定义当前模块进行构建操作时关联的其他模块名称
注意事项:参与聚合操作的模块最终执行顺序与模块间的依赖关系有关,与配置顺序无关
完整pom文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| <?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>com.xxx</groupId> <artifactId>ssm</artifactId> <version>1.0-SNAPSHOT</version> <packaging>pom</packaging>
<modules> <module>../ssm_controller</module> <module>../ssm_service</module> <module>../ssm_dao</module> <module>../ssm_pojo</module> </modules>
</project>
|
继承
作用:通过继承可以实现子工程使用父工程中的配置
创建方式:
- 在父工程中定义依赖管理
- 在所有子工程中定义依赖的父类工程坐标与位置
- 在子工程中定义依赖关系,无需声明依赖版本,版本参照父工程中依赖的版本
部分父pom文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| <project> <groupId>com.xxx</groupId> <artifactId>ssm</artifactId> <version>1.0-SNAPSHOT</version> <packaging>pom</packaging>
<modules> <module>../ssm_controller</module> </modules> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.1.9.RELEASE</version> </dependency> <dependencies> <dependencyManagement>
</project>
|
部分子pom文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| <project> <parent> <groupId>com.xxx</groupId> <artifactId>ssm</artifactId> <version>1.0-SNAPSHOT</version> <relativePath>../ssm/pom.xml</relativePath> </parent> <groupId>com.xxx</groupId> <artifactId>ssm_controller</artifactId> <version>1.0-SNAPSHOT</version>
<dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> </dependency> </dependencies>
</project>
|
可继承的父类资源
| 名称 |
功能 |
groupId |
项目组ID,项目坐标的核心元素 |
version |
项目版本,项目坐标的核心因素 |
description |
项目的描述信息 |
organization |
项目的组织信息 |
inceptionYear |
项目的创始年份 |
url |
项目的URL地址 |
developers |
项目的开发者信息 |
contributors |
项目的贡献者信息 |
distributionManagement |
项目的部署配置 |
issueManagement |
项目的缺陷跟踪系统信息 |
ciManagement |
项目的持续集成系统信息 |
scm |
项目的版本控制系统西溪 |
malilingLists |
项目的邮件列表信息 |
properties |
自定义的Maven属性 |
dependencies |
项目的依赖配置 |
dependencyManagement |
项目的依赖管理配置 |
repositories |
项目的仓库配置 |
build |
包括项目的源码目录配置、输出目录配置、插件配置、插件管理配置等 |
reporting |
包括项目的报告输出目录配置、报告插件配置等 |
继承与聚合的区别
作用:
相同点:
- 聚合与继承的pom.xml文件打包方式均为pom,可以将两种关系制作到同一个pom.xml文件中
- 聚合与继承均属于设计型模块,并无实际的模块内容
不同点:
- 聚合是在当前模块中配置关系,聚合可以感知参与聚合的模块有哪些
- 继承是在子模块中配置关系,父模块无法感知哪些子模块继承了自己
属性
属性分类5大类:
- 自定义属性
- 内置属性
- Setting属性
- Java系统属性
- 环境变量属性
自定义属性
作用:等同于定义变量,方便统一维护
定义格式:
1 2 3 4 5
| <properties> <spring.version>5.1.9.RELEASE</spring.version> <junit.version>4.12</junit.version> </properties>
|
调用格式:
1 2 3 4 5
| <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency>
|
内置属性
作用:使用maven内置属性,快速配置
调用格式:
1 2
| ${basedir}或 ${object.basedir}:读取基础路径 ${version} 或 ${object.version} = ${project.version}:读取当前工程版本信息
|
Setting属性
作用:使用Maven配置文件setting.xml中的标签属性,用于动态配置
调用格式:
1
| ${settings.localRepository}
|
Java系统属性
作用:读取Java系统属性
调用格式:
系统属性查询方式:
环境变量属性
作用:读取操作系统中的环境变量
调用格式:
环境变量属性查询方式:
版本管理
- SNAPSHOT(快照版本):开发中的版本,或测试版本。
- RELEASE(发布版本):已经开发完上线的版本。
工程版本号约定规范:
- 主版本.次版本.增量版本.里程碑版本
- 主版本:项目重大架构的变更
- 次版本:较大功能的增加和变化,或者全面修复系统漏洞
- 增量版本:表示有重大漏洞修复
- 里程碑版本:表名一个版本的里程碑(版本内部)。这一的版本同下一个正式版本相比,相对很不稳定,有待更多的测试。
- 示例:6.0.7.RELEASE
多配置文件统一管理
作用:在任意配置文件中加载pom文件中定义的属性
配置方式:
- 在pom文件中设定配置文件路径
- 开启加载pom属性过滤功能
- 在pom文件中设定属性
- 在任意配置文件中使用
${xxx.属性}格式引用pom属性
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| <properties> <spring.version>5.1.9.RELEASE</spring.version> <junit.version>4.12</junit.version> <jdbc.url>jdbc:mysql://127.0.0.1:3306/ssm_db</jdbc.url> </properties>
<build> <resources> <resource> <directory>${project.basedir}/src/main/resources</directory> <filtering>true</filtering> </resource> </resources> </build>
|
在/src/main/resources/jdbc.properties文件中引入pom属性
1 2
| jdbc.driver=com.mysql.jdbc.Driver jdbc.url=${jdbc.url}
|
多环境开发配置
多环境配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| <profiles> <profile> <id>production_env</id> <properties> <jdbc.url>jdbc:mysql://127.1.1.1:3306/ssm_db</jdbc.url> </properties> </profile> <profile> <id>development_env</id> …… </profile> <profile> <id>testing_env</id> …… </profile> </profiles>
|
加载指定环境
作用:加载指定环境配置
调用格式
1 2 3 4 5
| #格式 mvn 指令 -P 环境定义id
#范例 mvn install -P development_env
|
设置默认启动环境
设置默认启动,若当前环境为常用环境,可以将其设置为默认启动项,这样,在执行命令的时候就无需指定环境
1 2 3 4 5 6 7
| <profile> <activation> <activeByDefault>true</activeByDefault> </activation> </profile>
|
跳过测试
跳过测试环节的应用场景
- 整体模块功能未开发
- 模块中某个功能未开发完毕
- 单个功能更新调试导致其他功能失败
- 快速打包
使用命令跳过测试
1
| mvn install -D skipTests
|
注意事项:执行的指令生命周期必须包含测试环节
使用配置跳过测试
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| <pluginManagement> <plugins> <plugin> <artifactId>maven-surefire-plugin</artifactId> <version>2.22.1</version> <configuration> <skipTests>true</skipTests> <includes> <include>**/User*Test.java</include> </includes> <excludes> <exclude>**/User*TestCase.java</exclude> </excludes> </configuration> </plugin> </plugins> </pluginManagement>
|
使用IDEA跳过测试
私服
Nexus私服
Nexus是Sonatype公司的一款maven私服。
下载地址:https://help.sonatype.com/repomanager3/product-information/download
Nexus安装、启动和配置
启动服务器(终端命令)
访问服务器:http://localhost:8081
修改基础配置信息:
- 安装目录下
etc/nexus-default.properties文件中修改,比如端口号。
修改服务器运行配置信息:
- 安装目录下
bin/nexus.vmoptions文件中保存有nexus服务器启动对应的配置信息,例如占用内存空间。
仓库分类
- 宿主仓库hosted
- 代理仓库proxy
- 代理远程仓库,通过nexus访问其他公共仓库,例如中央仓库
- 仓库组group
- 将若干个仓库组成一个群组,简化配置
- 仓库组不能保存资源,属于设计型仓库
访问私服与组件上传
本地仓库访问私服配置
配置本地仓库访问私服的权限(setting.xml)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| <servers> <server> <id>私服中的仓库名</id> <username>私服账号</username> <password>私服密码</password> </server> ... </servers> ...
<mirror> <id>私服中的仓库名</id> <mirrorOf>*</mirrorOf> <url>http://localhost:8081/repository/maven-public/</url> </mirror>
|
组件上传
配置当前项目访问私服上传资源的保存位置(pom.xml)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| <disttributionManagement> <repository> <id>私服中的仓库名</id> <url>http://localhost:8081/resipotry/仓库名</url> </repository>
<snapshotRepository> <id>私服中的仓库名</id> <url>http://localhost:8081/resipotry/仓库名</url> </snapshotRepository> </disttributionManagement>
|
上传方式: