一、Maven高级
Maven分模块开发是指将一个大型项目分为多个模块,并使用Maven进行管理。每个模块可以独立编译、测试、包装和发布,也可以作为其他模块的依赖项目,实现模块化开发,提高项目的可重用性和可维护性。
以下是Maven分模块开发的步骤:
• 创建父亲项目:父亲项目的pom.所有子模块的共同依赖都定义在xml文件中,如JDK版本、Spring版本等。
• 创建子模块:在父工程下创建子模块目录,并在子模块中创建子模块目录.在xml文件中定义模块的依赖性和包装方法。
• 在父工程中引用子模块:在父工程中引用pom.引用xml文件中的子模块,使其成为父工程的依赖项。
• 执行Maven命令:在父亲项目的根目录下执行Maven命令,如mvn clean install,所有模块都可以编译、测试、包装和发布。
通过Maven分模块开发,可以使工程结构更加清晰,每个模块的责任更加清晰,易于维护和扩展。同时,可以提高代码的重用性,降低开发成本,提高工程的可维护性和可扩展性。
1.分模块开发设计
1.1 分为工程模块和模块
1.2 ssm_pojo拆分
新模块ssm_新模块ssm_pojo
将原始项目中对应的相关内容复制到ssm_pojo模块
• 实体类(User)
• 配置文件(无)
1.3 ssm_dao拆分
新模块ssm_新模块ssm_dao
将原始项目中对应的相关内容复制到ssm_dao模块
• 数据层接口(UserDao)
• 配置文件:保留与数据层相关的配置文件(3)
• 注:分页插件在配置中与SqlSessionFactoryBean绑定,需要保留
• pom.xml:引入数据层相关坐标,删除springmvc相关坐标
– spring
– mybatis
– spring 集成mybatis
– mysql
– druid
– pagehelper
– 直接依赖ssm_pojo(install指令执行ssm_pojo模块,并将其安装到当地仓库)
1.4 ssm_service拆分
• 新建模块
• 将原始项目中对应的相关内容复制到ssm_service模块
– 业务层接口与实现类(UserService、UserServiceImpl)
– 配置文件:保留与数据层相关的配置文件(1)
– pom.xml:引入数据层相关坐标,删除springmvc相关坐标
• spring
• junit
• spring 整合junit
• 直接依赖ssm_dao(install指令执行ssm_dao模块,并将其安装到当地仓库)
• 间接依赖ssm_pojo(ssm_dao模块负责建立依赖关系)
– 修改service模块spring核心配置文件名称,添加模块名称,格式:applicationContext-service.xml
– 修改dao模块spring核心配置文件名称,添加模块名称,格式:applicationContext-dao.xml
– 修改单元测试引入的配置文件名称,由单个文件修改为多个文件
1.5 ssm_control拆分
• 新模块(使用webapp模板)
• 将原始项目中对应的相关内容复制到ssm_controler模块
– 现层控制器类别及相关设置类别(UserController、异常相关…)
– 配置文件:保留与表现层相关的配置文件(1)、服务器相关配置文件(1)
– pom.xml:引入数据层相关坐标,删除springmvc相关坐标
• spring
• springmvc
• jackson
• servlet
• tomcat服务器插件
• 直接依赖ssm_service(install指令执行ssm_service模块,并将其安装到当地仓库)
• 间接依赖ssm_dao、ssm_pojo
– 修改web.在xml配置文件中加载spring环境的配置文件名称,使用*通配,加载所有applicationcontext-开始的配置文件
小节
分模块开发
• 该模块仅包含当前模块对应的功能类和配置文件
• 根据不同的模块功能独立制作spring核心配置
• 当前模块所依赖的模块只能以导入坐标的形式加入当前模块
• web.所有Spring核心配置文件都需要加载xml
2.聚合
2.1 构建和维护多模块
2.2 聚合
• 功能:聚合用于快速构建maven项目,一次构建多个项目/模块。
• 制作方式:
– 创建一个空模块,将包装类型定义为pom
<packaging>pom</packaging>
– 在构建和操作当前模块时定义与其他模块相关的名称
<modules><module>../ssm_controller</module><module>../ssm_service</module><module>../ssm_dao</module><module>../ssm_pojo</module></modules>
注:参与聚合操作的模块的最终执行顺序与模块之间的依赖有关,与配置顺序无关
3.继承
3.1 模块依赖于关系维护
3.2 继承
• 功能:在子工程中,父工程的配置可以通过继承来实现
– maven中的继承类似于java中的继承,在子工程中配置继承关系
• 制作方式:
– 在子工程中,声明其父工程坐标及相应位置
<!--定义该项目的父工程--><parent><groupId>com.itheima</groupId><artifactId>ssm</artifactId><version>1.0-SNAPSHOT</version><!--填写父亲项目的pom文件--><relativePath>../ssm/pom.xml</relativePath></parent>
3.3 继承依赖定义
在父项目中定义依赖管理
<!--声明此处依赖管理--><dependencyManagement><!--具体的依赖--><dependencies><!--spring环境--><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.1.9.RELEASE</version></dependency><dependencies><dependencyManagement>
3.4 继承依赖使用
依赖关系在子工程中定义,不需要声明依赖版本,版本参照父工程中依赖的版本
<dependencies><!--spring环境--><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId></dependency></dependencies>
3.5 继承的资源
groupId:项目组ID,项目坐标的核心元素version:项目版本,description项目坐标的核心因素:项目描述信息organization:inceptionyear项目组织信息:urlll项目创始年份:项目URL地址developers:contributors项目开发者信息:项目贡献者信息distributionmanagententent:isssueManagementtent项目的部署配置:项目缺陷跟踪系统信息cimanagement:SCM项目的持续集成系统信息:西溪malilingListst项目版本控制系统:项目邮件列表信息properties:自定义Maven属性dependencies:dependendencymangententent项目依赖配置:repositoriesse项目依赖管理配置:buildd项目仓库配置:reporting包括项目的源码目录配置、输出目录配置、插件配置、插件管理配置等:包括项目报告输出目录配置、报告插件配置等
3.6 继承与聚合
作用
• 聚合用于快速建设项目
• 用于快速配置继承
相同点:
• 聚合和继承pom.xml文件的包装方法是pom,可以在同一pom文件中制作两种关系
• 聚合和继承属于设计模块,没有实际的模块内容
不同点:
• 聚合是在当前模块中配置的关系。聚合可以感知参与聚合的模块是什么
• 继承是在子模块中配置的关系,父模块无法感知哪些子模块继承了自己
4.属性
4.1 统一版本的重要性
4.2 属性类别
1.自定义属性
2.内置属性
3.Setting属性
4.Java系统属性
5.环境变量属性
4.3 属性类别:自定义属性
作用
• 相当于定义变量,便于统一维护
定义格式:
<!--定义自定义属性--><properties><spring.version>5.1.9.RELEASE</spring.version><junit.version>4.12</junit.version></properties>
• 聚合和继承pom.xml文件的包装方法是pom,可以在同一pom文件中制作两种关系
• 聚合和继承属于设计模块,没有实际的模块内容
调用格式:
<dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${spring.version}</version></dependency>
4.4 属性类别:内置属性
作用
• 使用maven内置属性,快速配置
调用格式:
${basedir}${version}
4.5 属性类别:Setting属性
作用
• Setting使用Maven配置文件.用于动态配置xml中的标签属性
调用格式:
${settings.localRepository}
4.6 属性类别:Java系统属性类别
作用
• 读取Java系统的属性
调用格式
${user.home}
系统属性查询方法
mvn help:system
4.7 属性类别:环境变量属性
作用
• 使setting用Maven配置文件.用于动态配置xml中的标签属性
调用格式
${env.JAVA_HOME}
环境变量属性查询方法
mvn help:system
5.版本管理
5.1 区分工程版本
5.2 工程版本
• SNAPSHOT(快照版)
– 在项目开发过程中,为了方便团队成员的合作,解决模块间相互依赖和不断更新的问题,开发人员构建每个模块时,临时版本的输出称为快照版本(测试阶段版本)
– 随着开发的进展,u快照版本将不断更新
• RELEASE(发布版)
– u项目开发到阶段里程碑后,向团队外部发布相对稳定的版本。该版本对应的组件文件是稳定的。即使后续开发功能,也不会改变当前发布版本的内容。这个版本被称为发布版本
5.3 约定工程版本号
约定规范:
• <主版本>.<次版本>.<增量版本>.<里程碑版本>
• 主版:表示项目重大架构的变化,如:与Spring4相比,Spring5迭代
• 第二版:表示功能增加和变化较大,或全面系统地修复漏洞
• 增量版:表示有重大漏洞的修复
• 里程碑版本:显示一个版本的里程碑(内部版本)。与下一个正式版本相比,这个版本相对不稳定,需要更多的测试
6.资源配置
6.1 多文件维护的资源配置
6.2 pom属性引用配置文件
• 作用
– 将pom文件中定义的属性加载到任何配置文件中
• 调用格式
${jdbc.url}
• 加载pom属性开启配置文件
<!--配置资源文件对应的信息--><resources><resource><!--设置配置文件对应的位置目录,支持使用属性动态设置路径--><directory>${project.basedir}/src/main/resources</directory><!--对配置文件的资源进行加载过滤--><filtering>true</filtering></resource></resources>
7.多环境开发配置
7.1 多环境兼容
7.2 多环境配置
<!--创建多环境--><profiles><!--定义具体环境:生产环境--><profile><!--唯一定义环境对应的名称--><id>pro_env</id><!--在环境中定义特殊属性值--><properties><jdbc.url>jdbc:mysql://127.1.1.1:3306/ssm_db</jdbc.url></properties><!--默认启动设置--><activation><activeByDefault>true</activeByDefault></activation></profile><!--定义具体环境:开发环境--><profile><id>dev_env</id>……</profile></profiles>
7.3 加载指定的环境
作用
• 加载指定的环境配置
调用格式
mvn 指令 –P ID的环境定义
范例
mvn install –P pro_env
8.跳过测试
8.1 跳过测试环节的应用场景
未开发整体模块功能
模块中的某个功能尚未开发
单个功能更新调试导致其他功能失败
快速打包
……
8.2 使用命令跳过测试
命令
mvn 指令 –D skipTests
注意事项
• 执行指令的生命周期必须包括测试环节
8.3 使用界面操作跳过测试
8.4 使用配置跳过测试
<plugin><artifactId>maven-surefire-plugin</artifactId><version>2.22.1</version><configuration><skipTests>true</skipTests><!--设置跳过测试--><includes><!--设置跳过测试--><includes><!--包括指定的测试用例--><include>**/User*Test.java</include></includes><excludes><!--排除指定的测试用例--><exclude>**/User*TestCase.java</exclude></excludes></configuration></plugin>
9.私服
9.1 合作开发分模块
9.2 Nexus
Nexus是Sonatype公司的maven私服产品
下载地址:https://help.sonatype.com/repomanager3/download
9.3 Nexus*安装、启动和配置
启动服务器(启动命令行)
nexus.exe /run nexus
访问服务器(默认端口:8081)
http://localhost:8081
修改基本配置信息
• etc目录在安装路径下的nexus-default.properties文件保存nexus基本配置信息,如默认访问端口
修改服务器运行配置信息
• nexusus在安装路径下bin目录中.vmoptions文件保存nexus服务器启动对应的配置信息,如默认占用内存空间
9.4 获取私服资源
9.5 仓库分类
宿主仓库hostedted
• 保存不能从中央仓库获得的资源
– 自主研发
– 第三方非开源项目
代理仓库proxy
• 代理远程仓库,通过nexus访问其他公共仓库,如中央仓库
仓库组group
• 将多个仓库组成一个组,简化配置
• 仓库组不能保存资源,属于设计仓库
9.6 资源上传
在上传资源时提供相应的信息
• 保存位置(宿主仓库)
• 资源文件
• 对应坐标
9.7 上传和下载idea环境中的资源
9.8 访问私服配置(当地仓库访问私服)
配置当地仓库访问私人服务的权限(setting.xml)
<servers><server><id>heima-release</id><username>admin</username><password>admin</password></server><server><id>heima-snapshots</id><username>admin</username><password>admin</password></server></servers>
配置当地仓库资源来源(setting.xml)
<mirrors><mirror><id>nexus-heima</id><mirrorOf>*</mirrorOf><url>http://localhost:8081/repository/maven-public/</url></mirror></mirrors>
9.9 访问私服配置( 项目访问私服)
配置当前项目访问私人服务上传资源的保存位置(pom.xml)
<distributionManagement><repository><id>heima-release</id><url>http://localhost:8081/repository/heima-release/</url></repository><snapshotRepository><id>heima-snapshots</id><url>http://localhost:8081/repository/heima-snapshots/</url></snapshotRepository></distributionManagement>
向私服发布资源命令
mvn deploy