当前位置: 首页 > 图灵资讯 > 技术篇> Java教学课程 122-Maven的高级使用

Java教学课程 122-Maven的高级使用

来源:图灵教育
时间:2023-06-04 09:09:21

一、Maven高级

Maven分模块开发是指将一个大型项目分为多个模块,并使用Maven进行管理。每个模块可以独立编译、测试、包装和发布,也可以作为其他模块的依赖项目,实现模块化开发,提高项目的可重用性和可维护性。

以下是Maven分模块开发的步骤:

• 创建父亲项目:父亲项目的pom.所有子模块的共同依赖都定义在xml文件中,如JDK版本、Spring版本等。

• 创建子模块:在父工程下创建子模块目录,并在子模块中创建子模块目录.在xml文件中定义模块的依赖性和包装方法。

• 在父工程中引用子模块:在父工程中引用pom.引用xml文件中的子模块,使其成为父工程的依赖项。

• 执行Maven命令:在父亲项目的根目录下执行Maven命令,如mvn clean install,所有模块都可以编译、测试、包装和发布。

通过Maven分模块开发,可以使工程结构更加清晰,每个模块的责任更加清晰,易于维护和扩展。同时,可以提高代码的重用性,降低开发成本,提高工程的可维护性和可扩展性。

1.分模块开发设计

1.1 分为工程模块和模块

Java教学课程 122-Maven的高级使用_spring

1.2 ssm_pojo拆分

新模块ssm_新模块ssm_pojo

将原始项目中对应的相关内容复制到ssm_pojo模块

• 实体类(User)

• 配置文件(无)

Java教学课程 122-Maven的高级使用_xml_02

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模块,并将其安装到当地仓库)

Java教学课程 122-Maven的高级使用_spring_03

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

– 修改单元测试引入的配置文件名称,由单个文件修改为多个文件

Java教学课程 122-Maven的高级使用_spring_04

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-开始的配置文件

Java教学课程 122-Maven的高级使用_xml_05

小节

分模块开发

• 该模块仅包含当前模块对应的功能类和配置文件

• 根据不同的模块功能独立制作spring核心配置

• 当前模块所依赖的模块只能以导入坐标的形式加入当前模块

• web.所有Spring核心配置文件都需要加载xml

2.聚合

2.1 构建和维护多模块

Java教学课程 122-Maven的高级使用_spring_06

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>

Java教学课程

注:参与聚合操作的模块的最终执行顺序与模块之间的依赖有关,与配置顺序无关

3.继承

3.1 模块依赖于关系维护

Java教学课程 122-Maven的高级使用_配置文件_08

3.2 继承

• 功能:在子工程中,父工程的配置可以通过继承来实现

– maven中的继承类似于java中的继承,在子工程中配置继承关系

• 制作方式:

– 在子工程中,声明其父工程坐标及相应位置

<!--定义该项目的父工程--><parent><groupId>com.itheima</groupId><artifactId>ssm</artifactId><version>1.0-SNAPSHOT</version><!--填写父亲项目的pom文件--><relativePath>../ssm/pom.xml</relativePath></parent>

Java教学课程 122-Maven的高级使用_配置文件_09

3.3 继承依赖定义

在父项目中定义依赖管理

<!--声明此处依赖管理--><dependencyManagement><!--具体的依赖--><dependencies><!--spring环境--><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.1.9.RELEASE</version></dependency><dependencies><dependencyManagement>

Java教学课程 122-Maven的高级使用_配置文件_10

3.4 继承依赖使用

依赖关系在子工程中定义,不需要声明依赖版本,版本参照父工程中依赖的版本

<dependencies><!--spring环境--><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId></dependency></dependencies>

Java教学课程 122-Maven的高级使用_xml_11

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 统一版本的重要性

Java教学课程 122-Maven的高级使用_xml_12

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 区分工程版本

Java教学课程 122-Maven的高级使用_spring_13

5.2 工程版本

• SNAPSHOT(快照版)

– 在项目开发过程中,为了方便团队成员的合作,解决模块间相互依赖和不断更新的问题,开发人员构建每个模块时,临时版本的输出称为快照版本(测试阶段版本)

– 随着开发的进展,u快照版本将不断更新

• RELEASE(发布版)

– u项目开发到阶段里程碑后,向团队外部发布相对稳定的版本。该版本对应的组件文件是稳定的。即使后续开发功能,也不会改变当前发布版本的内容。这个版本被称为发布版本

5.3 约定工程版本号

约定规范:

• <主版本>.<次版本>.<增量版本>.<里程碑版本>

• 主版:表示项目重大架构的变化,如:与Spring4相比,Spring5迭代

• 第二版:表示功能增加和变化较大,或全面系统地修复漏洞

• 增量版:表示有重大漏洞的修复

• 里程碑版本:显示一个版本的里程碑(内部版本)。与下一个正式版本相比,这个版本相对不稳定,需要更多的测试

6.资源配置

6.1 多文件维护的资源配置

Java教学课程 122-Maven的高级使用_配置文件_14

6.2 pom属性引用配置文件

• 作用

– 将pom文件中定义的属性加载到任何配置文件中

• 调用格式

${jdbc.url}

• 加载pom属性开启配置文件

<!--配置资源文件对应的信息--><resources><resource><!--设置配置文件对应的位置目录,支持使用属性动态设置路径--><directory>${project.basedir}/src/main/resources</directory><!--对配置文件的资源进行加载过滤--><filtering>true</filtering></resource></resources>

7.多环境开发配置

7.1 多环境兼容

Java教学课程 122-Maven的高级使用_配置文件_15

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 使用界面操作跳过测试

Java教学课程 122-Maven的高级使用_spring_16

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 合作开发分模块

Java教学课程 122-Maven的高级使用_配置文件_17

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 获取私服资源

Java教学课程

9.5 仓库分类

宿主仓库hostedted

• 保存不能从中央仓库获得的资源

– 自主研发

– 第三方非开源项目

代理仓库proxy

• 代理远程仓库,通过nexus访问其他公共仓库,如中央仓库

仓库组group

• 将多个仓库组成一个组,简化配置

• 仓库组不能保存资源,属于设计仓库

9.6 资源上传

在上传资源时提供相应的信息

• 保存位置(宿主仓库)

• 资源文件

• 对应坐标

9.7 上传和下载idea环境中的资源

Java教学课程 122-Maven的高级使用_配置文件_19

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