一、问题出现背景:
- 用IDEA编辑器启动项目没有问题
- 用命令行执行mvn clean test会报错,原因就是编码格式的问题,但是加了-Dfile.encoding=utf-8仍然有问题。
YAMLException: java.nio.charset.MalformedInputException: Input length = 1
二、可能原因及尝试过程:
- 去掉中文就没有问题:改为Unicode配置然后再在代码中解码
- 增加中文注释一样会有问题,而去掉就没问题
- 参考Nacos配置中心yml文件中文配置启动报错问题解决可能需要加JVM参数,但mvn clean test怎么添加呢?直接加又没有用(mvn clean test -Dfile.encoding=UTF-8)。参考SpringBoot启动报错java.nio.charset.MalformedInputException: Input length = 1解决方案或许可以添加<maven.compiler.encoding>UTF-8</maven.compiler.encoding>来解决,但实际上还是有问题org.yaml.snakeyaml.error.YAMLException: java.nio.charset.MalformedInputException: Input length = 1,因为是Nacos读取远程配置文件中含有中文引起的问题。
- 参考SpringBoot Test + Nacos配置文件中文导致的java.nio.char set.MalformedInputException: Input length = 1最终修改pom文件<argLine>-Dfile.encoding=UTF-8</argLine>解决了
三、最终解决:
- 临时用Unicode配置,然后代码中增加解码操作。不过非测试环境直接用中文配置即可,只需要在测试环境用Unicode配置就行。如此做虽然解决了问题但增加了代码量。
- 在pom.xml文件中增加配置<argLine>-Dfile.encoding=UTF-8</argLine>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<testFailureIgnore>true</testFailureIgnore>
<argLine>-Dfile.encoding=UTF-8</argLine><!-- 增加配置 -->
</configuration>
</plugin>
备注: 本文主要是借助博客环境,同大家讨论异常问题解决的办法,欢迎大家评论,谢谢! |