解决了一个IDA编译代码时maven总是自动执行单元测试的问题

摘要:
众所周知,idea的maven插件上方,有一个“闪电”样式的按钮。不过不知道为什么,我们项目编译时,即使选中这个按钮,还是会执行单元测试,导致编译时间非常久。-Dmaven.test.skip=true,不执行测试用例,也不编译测试用例类。3从网上文章上看,加了这两个参数maven都不会执行单元测试,但实际上在我们项目里面skipTests参数是无效的。

​ 众所周知,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 问题修复后,最好将修改还原,看是否能复现问题。(有助于分清故障出现的充分条件和必要条件)

免责声明:文章转载自《解决了一个IDA编译代码时maven总是自动执行单元测试的问题》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇MySQL-查询线程信息系统禁用执行FIPS政策导致程序发生“调用的目标发生了异常”下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

前端项目里常见的十种报错及其解决办法

错误6:未标记引用错误:$isnotdefinedUncaughtReferenceError:$isnotfinedUnaughtReferenceError,如果将其更改为jsp页面,则无法找到路径。此时,它变成了一个幻影。png格式。此时,您只需将以下代码添加到文件:Picture。png解决方案:在和˂Base href=“”˃错误8:未捕获类型错误...

docsify制作在线说明文档的轻量级神器

我找到了一个使用html处理和加载md文件的网站。创建一个漂亮的在线描述文档(工件docsify)非常简单,nav可以删除--˃ENChinese加载window$docsify={el:'#main',//配置节点loadSidebar:true,//设置是否加载sidebarsubMaxLevel:2,//设置最大目录级别coverpage:true;/...

【资料】2021年最网红的FPGA开发板之一——DE10-Nano (SOC FPGA入门推荐!)

DE10 Nano开发板是2021最受欢迎的FPGA开发板之一。除了广泛应用于物联网、边缘计算、硬件加速、AI和EDA教育课程之外,许多爱好者还在网络上日益流行的开源复古游戏项目Mister中使用它。让我们来看看DE10 Nano提供的材料:Youjing官方网站上的材料(中文手册可用!!!23~课程培训材料2018产学合作培训材料基于2018产学协作培训材...

SQL中一次插入多条数据

SQL中insert一次可以插入一条数据,我们有三种方法可以一次性插入多条数据。在此处还有一些有趣的问题,当我使用以下代码来插入多条数据时:selecttop0*intonewstudentfromstudentinsertintonewstudentselect*fromstudent这里会发生这样的报错:因为NewClass表中ClassId为标识列,所...

fiddler抓包+雷电模拟器 完成手机app抓包的配置

找到系统应用,点击设置,点击无线网络WLAN—˃左键常按点击已连接网络—˃修改网络鼠标左键长按在桌面找到下面这个文件之后双击打开上面证书弄完之后。可以说本机已经安装过证书了,如果你能在模拟器上找到这个证书就不用将这个证书再拉入模拟器了在模拟器中打开系统应用—˃设置—˃安全—˃从SD卡安装。找到FiddlerRoot.cer文件,按提示导入即可,注意在此过程需...

LaTeX表格tabular背景色添加技巧 [转]

我们所用的宏包为colortbl,这个宏包可以设置表格中数据、文本、行、列、单元格前景和背景以及边框的颜色,从而得到彩色表格。同时需要array和color两个宏包的支持。宏包提供了一组着色命令,经常用到是列着色命令,其格式为:\columncolor[色系]{色名}[左伸出][右伸出]。常用色系有三原色rgb灰度gray和四色cmyk三种;被预定义的色名有...