• Maven进阶-多环境开发与跳过测试


    一、多环境配置

    1、简述

    多环境开发的设置是为了能让 Maven 构建项目时,根据不同的环境采用不同的配置。

    例如项目在开发时与项目上线时使用的数据库可能不是同一个数据库,我们可以把数据库的信息设置成两个环境,这样 maven 就会根据环境采用对应的配置

    项目开发时通常会有三种环境:开发环境(env.development),生产环境(env.prodction),测试环境(env_test),之后的样例中也会以这三种环境为示例

    2、设置不同的环境配置

    多环境的设置在 profiles 标签内,其中包含若干个 profile 标签,每个 profile 对应一种环境,其中包含 id 属性,表示该环境的唯一标识。

    profile 中可以设置此环境的各种配置,比如 properties(属性),dependencies(依赖),以及 modules,build 等等

    下面以不同环境的数据库连接属性为例,配置了三种环境:

     <profiles>
    	<profile>
    		
    		<id>env_developmentid>
    		<properties>
    			<jdbc.url>jdbc:mysql://localhost:3306/dbjdbc.url>
    			<jdbc.username>rootjdbc.username>
    			<jdbc.password>123456jdbc.password>
    		properties>
    	profile>
    	
    	<profile>
    		
    		<id>env_productionid>
    		<properties>
    			<jdbc.url>jdbc:mysql://192.168.56.1:3306/dbjdbc.url>
    			<jdbc.username>rootjdbc.username>
    			<jdbc.password>147258369jdbc.password>
    		properties>
    	profile>
    	
    	<profile>
    		
    		<id>env_testid>
    		<properties>
    			<jdbc.url>jdbc:mysql://192.168.56.1:3306/test_dbjdbc.url>
    			<jdbc.username>for-testjdbc.username>
    			<jdbc.password>123456jdbc.password>
    		properties>
    	profile>
     profiles>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    如此配置之后,Maven 构建项目时就会采用对应环境的数据库连接属性,配合使用过滤资源文件,让资源文件能够引用环境中的属性,切换环境时就不用更改各种配置文件了,只需指定环境即可

    二、环境的激活

    引言

    做好上面的多环境配置之后,此时我们构建项目,发现没有任何效果……

    原因很简单,没有任何环境被激活,Maven 也就没有采用任何一个环境配置,接下来看一下激活环境的几种方法

    1. 命令行激活

    使用命令构建项目时,用 -P 来指定环境,如下:

    mvn compile -P env_production
    
    • 1

    指定多个环境时用逗号分隔即可(不能有空格),如下:

    mvn compile -P env_production,env_test
    
    • 1

    2. 设置默认环境

    在 profile 中,activation 内设置 activeByDefault 属性为 true,该环境就被设为了默认环境,不指定环境时就会采用默认环境中的配置,如下例:

     <profiles>
    	<profile>
    		<id>env_developmentid>
    		
    		<activation>
    			<activeByDefault>trueactiveByDefault>
    		activation>
    	profile>
     profiles>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    将多个环境同时设为默认环境也是可以的,不指定环境时这些默认环境都会被激活

    3. activation 根据条件自动激活

    activation 激活环境的条件多种多样,可以按操作系统激活,也可以按 jdk 版本激活,按照系统参数激活,按照是否存在某个文件激活,等等

    这些激活条件都是 Maven 自动检测并激活的,无需手动指定

    下面是一个简单的示例

     <profiles>
    	<profile>
    		<id>env_productionid>
    		
    		<activation>
    			<jdk>1.8jdk> 
    			<os>
    				<family>linuxfamily> 
    			os>
    		activation>
    	profile>
     profiles>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    其他激活条件的设置可以参考这篇文章:Maven profile配置管理及激活profile的几种方式(非常非常详细)

    补充

    (1)激活的规则

    我们可以将激活分为三类:命令行指定激活,activation 自动激活,activeByDefault 默认激活

    指定激活与自动激活之间互不干扰,而只要有任何一个环境被指定或自动激活,默认激活就会失效

    也就是说,只有当所有环境都未被激活时才会采用默认激活

    (2)多个环境激活时的属性冲突

    不同环境可以同时被激活,这些被激活的环境配置都会被采用

    而不同的环境中可能对同一属性配置了不同的值,此时先声明的环境中的属性会被后声明的所覆盖,不同版本的依赖同理

    三、跳过测试

    引言

    Maven 进行打包之前都需要先测试,比如 package 和 install 都包含了 test 环节,而 compile 不会 test(声明周期中 compile 在 test 之前)

    但有的时候我们想跳过测试阶段直接打包,比如项目还没完全开发时,或者单纯想要快速打包时

    接下来看一下跳过测试的几种方法

    1. 命令行跳过测试

    加入属性 -D skipTests 即可(skipTests 区分大小写)

    mvn package -D skipTests 
    
    • 1

    2. 配置测试插件

    maven 测试用的插件是 maven-surefire-plugin,对这个插件进行配置

    (1)直接跳过

    设置 skip 属性为 true 即可,效果同命令行指令跳过

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.pluginsgroupId>
                <artifactId>maven-surefire-pluginartifactId>
                <version>2.22.1version>
                <configuration>
                    
                    <skip>trueskip>
                configuration>
            plugin>
        plugins>
    build>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    (2)引入与排除

    利用 includes 和 excludes 将指定文件引入或排除,最终引入的文件会被测试执行,达到只对部分文件测试的效果

    此时 skip 的值应该为 false,不能直接跳过测试阶段,否则这部分设置就没有意义了

    和 resources 中一样,includes 和 excludes 可以单独使用也可以放在一起使用

    没有 includes 标签时,默认引入 src/test 文件夹中所有文件

    excludes 对已经引用的文件进行排除

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.pluginsgroupId>
                <artifactId>maven-surefire-pluginartifactId>
                <version>2.22.1version>
                <configuration>
                    <skip>falseskip>
                    <includes>
                        <include>**/Book*Test.javainclude>
                    includes>
                    <excludes>
                        <exclude>**/User*Test.javaexclude>
                    excludes>
                configuration>
            plugin>
        plugins>
    build>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    3. IDEA 跳过测试

    IDEA 的 Maven 面版中,有一个小闪电的按钮,点击之后可以看到声明周期中的 test 划了线

    此时再点击 package 或者 install 就会跳过测试了

    在这里插入图片描述

    但这只是属于 IDEA 的设置,如果在命令行里输入命令打包,依然会进行测试

  • 相关阅读:
    Nautilus Chain 引入 $NAUT 通证,延续 $ZBC 的价值
    java毕业设计点播影院运营系统mybatis+源码+调试部署+系统+数据库+lw
    【HTML】HTML基础4.2(锚点链接)
    业务数据分析-Excel数据透视表(四)
    浅谈快速开发平台:突破系统开发边界,赋能企业数字化!
    第二次博客作业
    qt之movetothread理解
    开发环境之Spring.profiles.active
    常见问题-找不到vcruntime140.dll无法继续执行代码解决方案
    显示今天的年、月、日日期、时间的数据处理timetuple()
  • 原文地址:https://blog.csdn.net/Cey_Tao/article/details/126602653