Maven高级(四)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: Maven高级
步骤4:测试是否生效


测试的时候,只需要将maven_02_ssm项目进行打包,然后观察打包结果中最终生成的内容是否为Maven中配置的内容。


1.png


上面的属性管理就已经完成,但是有一个问题没有解决,因为不只是maven_02_ssm项目需要有属性被父工程管理,如果有多个项目需要配置,该如何实现呢?


方式一:

<build>
    <resources>
        <!--设置资源目录,并设置能够解析${}-->
        <resource>
            <directory>../maven_02_ssm/src/main/resources</directory>
            <filtering>true</filtering>
        </resource>
        <resource>
            <directory>../maven_03_pojo/src/main/resources</directory>
            <filtering>true</filtering>
        </resource>
        ...
    </resources>
</build>


可以配,但是如果项目够多的话,这个配置也是比较繁琐


方式二:

<build>
    <resources>
        <!--
      ${project.basedir}: 当前项目所在目录,子项目继承了父项目,
      相当于所有的子项目都添加了资源目录的过滤
    -->
        <resource>
            <directory>${project.basedir}/src/main/resources</directory>
            <filtering>true</filtering>
        </resource>
    </resources>
</build>


说明:打包的过程中如果报如下错误:


1.png


原因就是Maven发现你的项目为web项目,就会去找web项目的入口web.xml[配置文件配置的方式],发现没有找到,就会报错。


解决方案1:在maven_02_ssm项目的src\main\webapp\WEB-INF\添加一个web.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">
</web-app>


解决方案2: 配置maven打包war时,忽略web.xml检查

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>3.2.3</version>
            <configuration>
                <failOnMissingWebXml>false</failOnMissingWebXml>
            </configuration>
        </plugin>
    </plugins>
</build>


上面我们所使用的都是Maven的自定义属性,除了${project.basedir},它属于Maven的内置系统属性。


在Maven中的属性分为:


  • 自定义属性(常用)
  • 内置属性
  • Setting属性
  • Java系统属性
  • 环境变量属性


1.png


具体如何查看这些属性:


在cmd命令行中输入mvn help:system


1.png


具体使用,就是使用 ${key}来获取,key为等号左边的,值为等号右边的,比如获取红线的值,对应的写法为 ${java.runtime.name}


4.3 版本管理


关于这个版本管理解决的问题是,在Maven创建项目和引用别人项目的时候,我们都看到过如下内容:


1.png


这里面有两个单词,SNAPSHOT和RELEASE,它们所代表的含义是什么呢?


我们打开Maven仓库地址https://mvnrepository.com/


1.png


在我们jar包的版本定义中,有两个工程版本用的比较多:


  • SNAPSHOT(快照版本)
  • 项目开发过程中临时输出的版本,称为快照版本
  • 快照版本会随着开发的进展不断更新
  • RELEASE(发布版本)
  • 项目开发到一定阶段里程碑后,向团队外部发布较为稳定的版本,这种版本所对应的构件文件是稳定的
  • 即便进行功能的后续开发,也不会改变当前发布版本内容,这种版本称为发布版本


除了上面的工程版本,我们还经常能看到一些发布版本:


  • alpha版:内测版,bug多不稳定内部版本不断添加新功能
  • beta版:公测版,不稳定(比alpha稳定些),bug相对较多不断添加新功能
  • 纯数字版


对于这些版本,大家只需要简单认识下即可。


5,多环境配置与应用


这一节中,我们会讲两个内容,分别是多环境开发跳过测试


5.1 多环境开发


1.png


  • 我们平常都是在自己的开发环境进行开发,
  • 当开发完成后,需要把开发的功能部署到测试环境供测试人员进行测试使用,
  • 等测试人员测试通过后,我们会将项目部署到生成环境上线使用。
  • 这个时候就有一个问题是,不同环境的配置是不相同的,如不可能让三个环境都用一个数据库,所以就会有三个数据库的url配置,
  • 我们在项目中如何配置?
  • 要想实现不同环境之间的配置切换又该如何来实现呢?


maven提供配置多种环境的设定,帮助开发者在使用过程中快速切换环境。具体实现步骤:


步骤1:父工程配置多个环境,并指定默认激活环境

<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>

步骤2:执行安装查看env_dep环境是否生效


1.png


查看到的结果为:


1.png


步骤3:切换默认环境为生产环境

<profiles>
    <!--开发环境-->
    <profile>
        <id>env_dep</id>
        <properties>
            <jdbc.url>jdbc:mysql://127.1.1.1:3306/ssm_db</jdbc.url>
        </properties>
    </profile>
    <!--生产环境-->
    <profile>
        <id>env_pro</id>
        <properties>
            <jdbc.url>jdbc:mysql://127.2.2.2:3306/ssm_db</jdbc.url>
        </properties>
        <!--设定是否为默认启动环境-->
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
    </profile>
    <!--测试环境-->
    <profile>
        <id>env_test</id>
        <properties>
            <jdbc.url>jdbc:mysql://127.3.3.3:3306/ssm_db</jdbc.url>
        </properties>
    </profile>
</profiles>


步骤4:执行安装并查看env_pro环境是否生效


查看到的结果为jdbc:mysql://127.2.2.2:3306/ssm_db


1.png


虽然已经能够实现不同环境的切换,但是每次切换都是需要手动修改,如何来实现在不改变代码的前提下完成环境的切换呢?


步骤5:命令行实现环境切换


1.png


步骤6:执行安装并查看env_test环境是否生效


查看到的结果为jdbc:mysql://127.3.3.3:3306/ssm_db


1.png


所以总结来说,对于多环境切换只需要两步即可:


  • 父工程中定义多环境

 

 

<profiles>
  <profile>
      <id>环境名称</id>
        <properties>
          <key>value</key>
        </properties>
        <activation>
          <activeByDefault>true</activeByDefault>
        </activation>
    </profile>
    ...
</profiles>
  • 使用多环境(构建过程)
mvn 指令 -P 环境定义ID[环境定义中获取]


5.2 跳过测试


前面在执行install指令的时候,Maven都会按照顺序从上往下依次执行,每次都会执行test,


对于test来说有它存在的意义,


  • 可以确保每次打包或者安装的时候,程序的正确性,假如测试已经通过在我们没有修改程序的前提下再次执行打包或安装命令,由于顺序执行,测试会被再次执行,就有点耗费时间了。
  • 功能开发过程中有部分模块还没有开发完毕,测试无法通过,但是想要把其中某一部分进行快速打包,此时由于测试环境失败就会导致打包失败。


遇到上面这些情况的时候,我们就想跳过测试执行下面的构建命令,具体实现方式有很多:


方式一:IDEA工具实现跳过测试


1.png


图中的按钮为Toggle 'Skip Tests' Mode,


Toggle翻译为切换的意思,也就是说在测试与不测试之间进行切换。


点击一下,出现测试画横线的图片,如下:


1.png


说明测试已经被关闭,再次点击就会恢复。


这种方式最简单,但是有点"暴力",会把所有的测试都跳过,如果我们想更精细的控制哪些跳过哪些不跳过,就需要使用配置插件的方式。


方式二:配置插件实现跳过测试


在父工程中的pom.xml中添加测试插件配置


 

<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来设置的


方式三:命令行跳过测试


1.png


使用Maven的命令行,mvn 指令 -D skipTests


注意事项:


  • 执行的项目构建指令必须包含测试生命周期,否则无效果。例如执行compile生命周期,不经过test生命周期。
  • 该命令可以不借助IDEA,直接使用cmd命令行进行跳过测试,需要注意的是cmd要在pom.xml所在目录下进行执行。


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
6月前
|
Java Maven Spring
Maven高级-属性配置使用、资源文件引用属性及版本管理
Maven高级-属性配置使用、资源文件引用属性及版本管理
160 0
|
6月前
|
Java Maven Spring
Maven高级-继承、实施步骤及聚合与继承的区别
Maven高级-继承、实施步骤及聚合与继承的区别
71 0
|
6月前
|
Java Maven
Maven高级-分模块开发和设计及依赖管理
Maven高级-分模块开发和设计及依赖管理
74 0
|
6月前
|
存储 Oracle Java
Maven高级-私服简介与安装及私服仓库分类
Maven高级-私服简介与安装及私服仓库分类
125 0
|
6月前
|
Java 关系型数据库 MySQL
Maven高级
Maven高级
47 0
|
6月前
|
Java Maven 开发者
Maven高级-聚合与继承 私服(图文并茂)
Maven高级-聚合与继承 私服(图文并茂)
65 0
|
6月前
|
Java Maven 数据安全/隐私保护
Maven高级-本地仓库访问私服配置及私服资源上传与下载
Maven高级-本地仓库访问私服配置及私服资源上传与下载
1171 0
|
6月前
|
Java 测试技术 Maven
Maven高级-多环境配置与应用及跳过测试方式
Maven高级-多环境配置与应用及跳过测试方式
87 0
|
6月前
|
Java Maven
Maven高级-聚合及实施步骤
Maven高级-聚合及实施步骤
68 0
|
存储 Java 程序员
【Maven基础篇-黑马程序员】Maven项目管理从基础到高级,一次搞定!
依赖范围传递性 带有依赖范围的资源在进行传递时,作用范围将受到影响
87 0

推荐镜像

更多
下一篇
无影云桌面