Maven 执行Test时控制台输出中文乱码原因分析及解决方法
起因
今天下午使用Maven构建项目时,运行测试失败,查看出错原因时发现控制台输出如下图
## 经过
Google一下以后发现maven-surefire-plugin的乱码问题
目测跟我遇到的原因相同,这里直接把主要内容复制过来
究其原因,是因为MAVEN的maven-surefire-plugin在新建JVM进程后,由于没有指定encoding,采用了OS的默认编码,导致读取UTF-8文件(测试类的sql脚本文件)时出现乱码,最终影响了TestNG的正确执行.
具体原因如下:
maven-surefire-plugin是运行mvn test时执行测试的插件,其有一个配置参数forkMode,默认为once,即表示每次运行test时,新建一个JVM进程运行所有test.这可能会导致乱码问题.首先将forkMode设置为never,即不新建.再运行mvn test,全部OK了.果然是这个问题!!
于是再找官方参数说明,发现了argLine参数,这个参数与forkMode一起使用,可以设置新建JVM时的JVM启动参数,于是设置-Dfile.encoding=UTF-8 ,明确指定一下JVM的file.encoding,并将forkMode从never改回once,还是每次新建一个JVM进程.再次运行mvn test,一起OK了,问题解决.
结果
修改后的pom.xml
|
|
重点是
<argLine>-Dfile.encoding=UTF-8</argLine>