一、分模块开发与设计
分模块开发的意义
将原始模块按照功能拆分成若干个子模块,方便模块间的相互调用,接口共享
分模块开发的步骤:
-
创建Maven模块
-
书写模块代码
-
分模块开发需要先针对模块功能进行设计,再进行编码;
-
不会先将工程开发完毕,然后进行拆分;
-
拆分方式可以按照功能拆也可以按照模块拆
-
-
通过maven指令安装模块到本地仓库(install 指令)
- 团队内部开发需要发布模块功能到团队内部可共享的仓库中(私服)
二、依赖管理
<!--设置当前项目所依赖的所有jar-->
<dependencies>
<!--设置具体的依赖-->
<dependency>
<!--依赖所属群组id-->
<groupId>org.springframework</groupId>
<!--依赖所属项目id-->
<artifactId>spring-webmvc</artifactId>
<!--依赖版本号-->
<version>5.2.10.RELEASE</version>
</dependency>
</dependencies>
1. 依赖传递
2. 可选依赖与排除依赖
-
可选依赖
可选依赖指对外隐藏当前所依赖的资源---不透明
<!--可选依赖是隐藏当前工程所依赖的资源,隐藏后对应资源将不具有依赖传递--> <optional>true</optional>
-
排除依赖
排除依赖指主动断开依赖的资源,被排除的资源无需指定版本---不需要
<!--排除依赖是隐藏当前资源对应的依赖关系--> <exclusions> <exclusion> <groupId></groupId> <artifactId></artifactId> </exclusion> </exclusions>
三、聚合与继承
1. 聚合
所谓的聚合就是将多个模块组织成一个整体,同时进行项目构建的过程称为聚合
聚合工程:通常是一个不具有业务功能的"空"工程(有且仅有一个pom文件),聚合工程主要是用来管理项目
作用:
- 使用聚合工程可以将多个工程编组,通过对聚合工程进行构建,实现对所包含的模块进行同步构建
- 当工程中某个模块发生更新(变更)时,必须保障工程中与已更新模块关联的模块同步更新, 此时可以使用聚合工程来解决批量模块同步构建的问题
聚合工程创建步骤:
-
创建一个空的maven项目
-
将项目的打包方式改为pom
<!--设置项目打包方式--> <packaging>pom</packaging>
打包方式:
# jar:默认情况,说明该项目为java项目 # war:说明该项目为web项目 # pom:说明该项目为聚合或继承项目
-
在pom.xml添加所要管理的项目
<!--设置管理的模块名称--> <modules> <module>../maven_02_ssm</module> <module>../maven_03_model</module> <module>../maven_04_dao</module> </modules>
-
使用聚合统一管理项目(compile 指令)
说明:聚合工程管理的项目在进行运行的时候,会按照项目与项目之间的依赖关系来自动决定执行的顺序和pom.xml里配置的顺序无关
2. 继承
所谓的继承就是描述的是两个工程间的关系,与java中的继承相似,子工程可以继承父工程中的配置信 息,常见于依赖关系的继承
作用:
简化配置、减少版本冲突
继承的使用步骤:
-
将子项目共同使用的jar包都抽取出来,维护在父项目(聚合工程)的pom.xml中
-
在子项目的pom.xml里配置继承自父项目(聚合工程)的pom.xml
<!--配置当前工程继承自parent工程--> <parent> <groupId>com.itheima</groupId> <artifactId>maven_01_parent</artifactId> <version>1.0-RELEASE</version> <relativePath>../maven_01_parent/pom.xml</relativePath> </parent>
-
优化子项目依赖版本问题
在父工程(聚合工程)的pom.xml里定义依赖管理
<!--定义依赖管理--> <dependencyManagement> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> </dependencies> </dependencyManagement>
在子项目的pom.xml里添加定义好的依赖
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <scope>test</scope> </dependency>
注意:这里不能需要添加版本,这样做的好处就是当父工程dependencyManagement标签中的版 本发生变化后,子项目中的依赖版本也会跟着发生变化
3. 聚合与继承的区别
作用:
- 聚合用于快速构建项目,对项目进行管理
- 继承用于快速配置和管理子项目中所使用jar包的版本
相同点:
- 聚合与继承的pom.xml文件打包方式均为pom,可以将两种关系制作到同一个pom文件中
- 聚合与继承均属于设计型模块,并无实际的模块内容
不同点:
- 聚合是在当前模块中配置关系,聚合可以感知到参与聚合的模块有哪些
- 继承是在子模块中配置关系,父模块无法感知哪些子模块继承了自己
四、属性与版本管理
-
属性
属性的使用步骤:
-
在父工程(聚合工程)中定义属性
<!--定义属性--> <properties> <spring.version>5.2.10.RELEASE</spring.version> </properties>
-
修改依赖的version
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <!--引用属性--> <version>${spring.version}</version> </dependency>
-
-
配置文件加载属性
-
在父工程(聚合工程)定义属性
<properties> <jdbc.url>jdbc:mysql://127.1.1.1:3306/ssm_db</jdbc.url> </properties>
-
在properties文件中引用属性
jdbc.url=${jdbc.url}
-
设置maven过滤文件范围
<build> <resources> <!-${project.basedir}: 当前项目所在目录,子项目继承了父项目,相当于所有的子项目都添加了资源目录的过滤--> <resource> <directory>${project.basedir}/src/main/resources</directory> <!--设置能够解析${},默认是false --> <filtering>true</filtering> </resource> </resources> </build>
-
-
版本管理
工程版本:
-
SNAPSHOT(快照版本)
项目开发过程中临时输出的版本,称为快照版本快照版本会随着开发的进展不断更新
-
RELEASE(发布版本)
项目开发到一定阶段里程碑后,向团队外部发布较为稳定的版本,这种版本所对应的构件文件 是稳定的即便进行功能的后续开发,也不会改变当前发布版本内容,这种版本称为发布版本
发布版本:
-
alpha版:内测版,bug多不稳定内部版本不断添加新功能
-
beta版:公测版,不稳定(比alpha稳定些),bug相对较多不断添加新功能
-
纯数字版
-
五、多环境开发与应用
-
多环境开发
-
在父工程(聚合工程)配置多个环境,并指定默认激活环境
<profiles> <!--开发环境--> <profile> <id>env_dep</id> <properties> <jdbc.url>jdbc:mysql://127.1.1.1:3306/ssm_db</jdbc.url> </properties> <!--设定是否为默认启动环境--> <activation> <activeByDefault>true</activeByDefault> </activation> </profile> <!--生产环境--> <profile> <id>env_pro</id> <properties> <jdbc.url>jdbc:mysql://127.2.2.2:3306/ssm_db</jdbc.url> </properties> </profile> <!--测试环境--> <profile> <id>env_test</id> <properties> <jdbc.url>jdbc:mysql://127.3.3.3:3306/ssm_db</jdbc.url> </properties> </profile> </profiles>
-
使用多环境(构建过程)
语法:mvn 指令 -P 环境定义ID[环境定义中获取]
mvn install -P env_test
-
-
跳过测试
-
配置插件实现跳过测试
<build> <plugins> <plugin> <artifactId>maven-surefire-plugin</artifactId> <version>2.12.4</version> <configuration> <skipTests>false</skipTests> <!--排除掉不参与测试的内容--> <excludes> <exclude>**/BookServiceTest.java</exclude> </excludes> </configuration> </plugin> </plugins> </build>
注意:
- skipTests:如果为true,则跳过所有测试,如果为false,则不跳过测试 - excludes:哪些测试类不参与测试,即排除,针对skipTests为false来设置的 - includes: 哪些测试类要参与测试,即包含,针对skipTests为true来设置的
-
命令行跳过测试
语法:mvn 指令 -D skipTests
mvn install -D skipTests
-
六、私服
私服其实就是公司内部搭建的用于存储Maven资源的服务器所以说私服是一台独立的服务器,用于解决团队内部的资源共享与资源同步问题
Nexus:
-
使用cmd进入到解压目录下的nexus\bin,执行如下命令启动Nexus:
nexus.exe /run nexus
-
浏览器访问http://localhost:8081
修改基础配置信息
- 安装路径下etc目录中nexus-default.properties文件保存有nexus基础配置信息,例如 默认访问端口。
修改服务器运行配置信息
- 安装路径下bin目录中nexus.vmoptions文件保存有nexus服务器启动对应的配置信息,例如 默认占用内存空间。