zoukankan      html  css  js  c++  java
  • 解决了一个IDA编译代码时maven总是自动执行单元测试的问题

    ​ 众所周知,idea的maven插件上方,有一个“闪电”样式的按钮。网上介绍是:该按钮保持按下状态时,编译代码时就不会自动执行单元测试。

    ​ 不过不知道为什么,我们项目编译时,即使选中这个按钮,还是会执行单元测试,导致编译时间非常久。所以之前每次编译时,需要在终端里面手工执行maven,加上-Dmaven.test.skip=true参数才行。

    ​ 之前由于项目紧张,就没仔细思考原因,直到最近项目进度相对理想,有了一些空闲时间,于是开始研究这个问题。

    1 首先我在idea设置里面,把maven日志级别改成debug,这样编译时就能输出更多信息

    2 通过debug日志分析,我发现选中“闪电”按钮,idea编译时,是给代码增加一个-DskipTests=true的参数。

    网上查了一下maven.test.skip跟skipTests两个参数区别,是这样说的:

    -DskipTests,不执行测试用例,但编译测试用例类生成相应的class文件至target/test-classes下。

    -Dmaven.test.skip=true,不执行测试用例,也不编译测试用例类。

    3 从网上文章上看,加了这两个参数maven都不会执行单元测试,但实际上在我们项目里面skipTests参数是无效的。

    4 于是我猜测,是不是有其它地方配置了skipTests参数,覆盖了命令行的参数值。

    于是全局搜索项目,发现在pom里面有这样的配置:

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>${java.version}</source>
                    <target>${java.version}</target>
                    <encoding>${project.build.sourceEncoding}</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <configuration>
                    <skipTests>true</skipTests>
                    <testFailureIgnore>true</testFailureIgnore>
                </configuration>
            </plugin>
        </plugins>
    </build>
    

    5 猜测是由于这个参数引导起的异常。尝试把参数删除,发现“闪电”按钮现在可以生效了。猜测配置文件里面参数优先级高于命令行的(这优先级跟sptring-boot的不一样,spring-boot是命令行参数最大)

    6 后来又再网上找了一下,找到一篇完整介绍maven单元测试功能的文章,里面有一行说明文字,也映证了我的猜测: “配置skipTests, configuration的配置优先级最高,命令中得配置次之, properties的配置最低”

    我这里引用一下原文:

    https://www.cnblogs.com/qyf404/p/5013694.html

    3.1.3.在执行命令中声明

    在执行maven命令时可以声明跳过测试用例

    qyfmac$ mvn test -Dmaven.test.skip=true
    

    qyfmac$ mvn test -DskipTests=true
    

    3.1.4.跳过测试用例优先级排序

    首先分两种情况,一种是配置skipTests,一种是配置maven.test.skip(真要命,声明位置就三处了,还搞出两个变量名,一共就是5种情况).

    • 如果是配置skipTests, configuration的配置优先级最高,命令中得配置次之, properties的配置最低.
    • configuration > 命令 > properties
    • 如果是配置maven.test.skip,命令中得配置优先级最高, properties的配置最低.
      命令 > properties
    • skipTestsmaven.test.skip有一个被设置成了true,则跳过测试用例.
      skipTests||maven.test.skip决定是否跳过测试用例执行.

    7 总结一下这个问题解决思路:
    a 查看正常与异常日志,对比差异
    b 根据差异内容,百度查找相关信息
    c 问题修复后,最好将修改还原,看是否能复现问题。(有助于分清故障出现的充分条件和必要条件)

  • 相关阅读:
    复制excel表中的数据
    微信H5页面分享获取JS-SDK
    JS中let、var、const的区别
    JS-对象常用方法整理
    JS-数组常用方法整理
    掌握一门新技术/语言需要哪些步骤?
    浅谈JavaScript中的内存管理
    js对象模型2
    ts中的装饰器
    ts中的泛型
  • 原文地址:https://www.cnblogs.com/kingstarer/p/13977933.html
Copyright © 2011-2022 走看看