分模块开发与设计

将项目按功能或模块进行拆分,分模块对项目进行开发。

好处:降低耦合,方便团队协作

分模块开发注意事项

  • 模块中仅包含当前模块对应的功能类与配置文件
  • 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>
<!--spring环境-->
<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>
<!--填写父工程的pom文件-->
<relativePath>../ssm/pom.xml</relativePath>
</parent>

<groupId>com.xxx</groupId>
<artifactId>ssm_controller</artifactId>
<version>1.0-SNAPSHOT</version>

<dependencies>
<!--spring环境-->
<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系统属性

调用格式:

1
${user.home}

系统属性查询方式:

1
mvn help:system

环境变量属性

作用:读取操作系统中的环境变量

调用格式:

1
${env.JAVA_HOME}

环境变量属性查询方式:

1
mvn help:system 

版本管理

  • SNAPSHOT(快照版本):开发中的版本,或测试版本。
  • RELEASE(发布版本):已经开发完上线的版本。

工程版本号约定规范:

  • 主版本.次版本.增量版本.里程碑版本
    • 主版本:项目重大架构的变更
    • 次版本:较大功能的增加和变化,或者全面修复系统漏洞
    • 增量版本:表示有重大漏洞修复
    • 里程碑版本:表名一个版本的里程碑(版本内部)。这一的版本同下一个正式版本相比,相对很不稳定,有待更多的测试。
  • 示例:6.0.7.RELEASE

多配置文件统一管理

作用:在任意配置文件中加载pom文件中定义的属性

配置方式:

  1. 在pom文件中设定配置文件路径
  2. 开启加载pom属性过滤功能
  3. 在pom文件中设定属性
  4. 在任意配置文件中使用${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安装、启动和配置

启动服务器(终端命令)

1
nexus.exe /run 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>

上传方式:

  • 发布资源到私服命令mvn deploy