Maven高级
文章目录
一、分模块开发与设计
1.什么是分模块开发?
一个大项目拆分为多个小项目(maven模块)组成,而且它们是有依赖关系的。
2.为什么需要分模块开发
使用传统的ssm结构,在随着项目的进行,我们可能遇到下面一系列的问题:
(1) 大部分的main或者一些service以及mapper在多个项目中是通用的
(2) pom.xml中的依赖越来越长
(3) build整个项目的时间越来越长,尽管你只是一直在web层工作,但是不得不build整个项目
(4) 某个模块,只想让一些经验丰富的人来维护,但是现在每个开发者都能修改这个模块,这导致关键模块的代码质量达不到要求
3.怎么去分模块开发
写项目写代码尽量满足以下内容:
(1) 开闭原则
对扩展开放
对修改关闭–>公共内容不要乱修改
(2) 高内聚低耦合
拆分:
按照层次结构拆分
按照业务功能拆分:电商、订单、物流……
小结
分模块开发
- 模块中仅包含当前模块对应的功能类与配置文件spring
- 核心配置根据模块功能不同进行独立制作
- 当前模块所依赖的模块通过导入坐标的形式加入当前模块后才可以使月
- web.xml需要加载所有的spring核心配置文件
工程模块与模块划分
二、聚合
1.作用
用于快速构建Maven工程,一次性构建多个项目/模块
2.制作方式
(1)定义一个空模块,打包类型设置为pom
<packaging>pom</packaging>
(2)定义当前模块进行构建操作时关联的其他模块名称
<modules>
<module>../模块名</module>
<module>../模块名</module>
<module>../模块名</module>
</modules>
3.注意事项
参与聚合操作的模块最终执行顺序月模块间的依赖关系有关,与配置顺序无关
三、继承
1.作用
(1)通过继承可以实现在子工程中沿用父工程中的配置
(2)maven中的继承与java中的继承相似,在子工程中配置继承关系
2.制作方式
(1)在子工程中声明其父工程坐标与对应的位置
<!--定义该工程的父工程-->
<parent>
<groupId>com.lb</groupId>
<artifactId>ssm</ artifactId>
<version>1.0-SNAPSHOT</version>
<! --填写父工程的pom文件-->
<relativePath> . ./ ssm/ pom.xml</ relativePath>
</parent>
(2)在父工程中定义依赖管理
<!--声明此处进行依赖管理-->
<dependencyManagement>
<!--具体的依赖-->
<dependencies>
<!—-spring环境-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</ artifactId>
<version>5.1.9.RELEASE</version>
</dependency>
<dependencies>
<dependencyManagement>
(3)在子工程中定义依赖关系,无需生命依赖版本,版本参照父工程中依赖的版本
<dependencies>
<!—-spring环境-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</ artifactId>
</dependency>
<dependencies>
3.继承与聚合的对比
继承 | 聚合 | |
---|---|---|
作用 | 用于快速配置 | 用于快速构建项目 |
相同点 | 打包方式均为pom | 均属于设计型模块无实际的模块内容 |
不同点 | 继承是在子模块中配置关系,父模块无法感知哪些子模块继承了自己 | 聚合是在当前模块中配置关系,聚合可以感知到参与聚合的模块有哪些 |
四、属性
1.自定义属性
(1)作用
等同与定义变量,方便统一维护
(2)定义格式
<!--定义自定义属性-->
<properties>
<spring.version>5.1.9.RELEASE</spring.version>
<junit.version>4.12</junit.version>
</properties>
(3)调用格式
<dependeney>
<groupid>org.springframework</grouprd>
<artifactId>spring-context</ artifactId>
<version>${spring.version}</version>
</ dependency>
2.内置属性
(1)作用
使用maven内置属性,快速配置
(2)调用格式
${basedir}
${version}
3.Setting属性
(1)作用
使用Maven配置文件setting.xml中的标签属性,用于动态配置
(2)调用格式
${settings.localRepository}
4.Java系统属性
(1)作用
读取Java系统属性
(2)调用格式
${user.home}
5.环境变量属性
(1)作用
使用Maven配置文件setting.xml中的标签属性,用于动态配置
(2)调用格式
${evn.JAVA_HOME}
五、版本管理
1.SNAPSHOT(快照版本)
项目开发过程中,为方便团队成员合作,解决模块间相互依赖和时时更新的问题,开发者对每个模块进行构建的时候,输出的临时性版本叫快照版本(测试阶段版本),快照版本会随着开发的进展不断更新
2.RELEASE(发布版本)
项目开发到进入阶段里程碑后,向团队外部发布较为稳定的版本,这种版本所对应的构件文件是稳定的,即便进行功能的后续开发,也不会改变当前发布版本内容,这种版本称为发布版本
六、资源配置
1.作用
在任意配置文件中加载pom文件中定义的属性
2.调用格式
${jdbc.url}
七、多环境开发配置
1.多环境配置
<!――创建多环境-->
<profiles>
<!--定义具体的环境:生产环境-->
<profile>
<!--定义环境对应的唯一名称-->
<id>pro_env</id>
<!―-定义环境中专用的属性值-->
<properties>
<jdbc.url>jdbc :mysql : //127.1.1.1:3306/ssm_db</jdbc.ur1>
</properties>
<!--设置默认启动-->
<activation>
<activeByDefault>true</ activeByDefault>
</ activation>
</ profile>
<!--定义具体的环境:开发环境-->
<profile>
<id>dev_env</id>
</profile>
.…-
</profiles>
2.加载指定环境
调用格式
mvn 指令 -P 环境定义id
八、跳过测试
1.使用命令跳过测试
命令
mvn 指令 -D skipTests
2.使用界面操作跳过测试
3.使用配置跳过测试
<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>
九、私服
1.Nexus
Nexus是Sonatype公司的一款maven私服产品
下载地址
2.Nexus安装、启动与配置
1.启动服务器(命令行启动)
nexus.exe / run nexuS
2.访问服务器(默认端口:8081)
http:/l localhost :8081
3.修改基础配置信息
安装路径下etc目录中nexus-default.properties文件保存有nexus基础配置信息,例如默认访问端口
4.修改服务器运行配置信息
安装路径下bin目录中nexus.vmoptions文件保存有nexus服务器启动对应的配置信息,例如默认占用内存空间
3.仓库分类
1.宿主仓库hosted
保存无法从中央仓库获取的资源
自主研发
第三方非开源项目
2.代理仓库proxy
代理远程仓库,通过nexus访问其他公共仓库,例如中央仓库
3.仓库组group
将若干个仓库组成一个群组,简化配置
仓库组不能保存资源,属于设计型仓库
4.访问私服配置
1.本地仓库访问私服
配置本地仓库访问私服的权限(setting.xml)
<servers>
<server>
<id>仓库id</id>
<username>用户名</username>
<password>密码</password>
</server>
<server>
<<id>仓库id</id>
<username>用户名</username>
<password>密码</password>
</server>
</ servers>
配置本地仓库资源来源(setting.xml)
<mirrors>
<mirror>
<id>nexusid</id>
<mirrorOf>*</mirrorOf>
<ur1>http://localhost:8081/repository/maven-public/</ur1>
</mirror>
</mirrors>
2.项目工程访问私服
配置当前项目访问私服上传资源的保存位置(pom.xml)
<distributionManagement>
<repository>
<id>私服id</id>
<ur1>私服url/</ur1>
</ repository>
<snapshotRepository>
<id>私服id</id>
<ur1>私服url/</ur1>
</snapshotRepository>
</ distributionManagement>
发布资源到私服命令
mvn deploy